文档

mc sql

语法

mc sql 命令提供 S3 Select 接口,用于对指定 MinIO 部署中的对象执行 SQL 查询。

有关 S3 Select 的行为和限制,请参阅 Selecting content from objects

以下命令会查询 myminio MinIO 部署中 mydata 存储桶内的所有对象:

mc sql --recursive --query "select * from S3Object" myminio/mydata

该命令的语法如下:

mc [GLOBALFLAGS] mc sql                          \
                 --query "string"                \
                 [--csv-input "string"]          \
                 [--compression "string"]        \
                 [--csv-output "string"]         \
                 [--csv-output-header "string"]  \
                 [--enc-c "string"]              \
                 [--json-input "string"]         \
                 [--json-output "string"]        \
                 [--recursive]                   \
                 ALIAS
  • 方括号 [] 表示可选参数。

  • 同一行中的参数彼此相互依赖。

  • 使用管道符 | 分隔的参数彼此互斥。

请先将示例复制到文本编辑器中并按需修改,再在终端 / shell 中运行命令。

参数

ALIAS
Required

要执行 SQL 查询的存储桶或对象的完整路径。 指定已配置 S3 服务的 alias 作为 ALIAS 路径前缀。 例如:

mc sql [FLAGS] play/mybucket
--query, e
Required

在指定 ALIAS 目录或对象上执行的 SQL 语句。 将完整 SQL 查询用双引号 " 包裹。

默认为 "select * from S3Object"

--csv-input
Optional

.csv 输入对象的数据格式。 指定由逗号分隔的 key=value,... 键值对字符串。 有效键的更多信息请参阅 CSV 格式字段

--compression
Optional

输入对象的压缩类型。 指定以下受支持值之一:

  • GZIP

  • BZIP2

  • ``NONE``(默认)

仅 MinIO 后端支持以下压缩方案:

--csv-output
Optional

.csv 输出的数据格式。 指定由逗号分隔的 key=value,... 键值对字符串。 有效键的更多信息请参阅 CSV 格式字段

更多信息请参阅 S3 API CSVOutput

--csv-output-header
Optional

.csv 输出文件的表头行。 将逗号分隔的字段字符串指定为 field1,field2,...

省略该参数则输出不包含表头行的 .csv

--enc-c
Optional

使用客户端管理的密钥,通过服务端 SSE-C 加密 对对象进行加密或解密。

该参数接受格式为 KEY=VALUE 的键值对。

KEY

对象的完整路径,格式为 alias/bucket/path/object.ext

你也可以只指定顶层路径,以便对该路径下的所有操作使用同一个加密密钥。

VALUE

指定用于 SSE-C 加密的密钥,可以是 32 字节 RawBase64 编码密钥, 也可以是 64 字节十六进制编码密钥。

Raw Base64 编码 不接受= 填充的密钥。 请去掉填充,或使用支持 RAW 格式的 Base64 编码器。

  • KEY - 对象的完整路径,格式为 alias/bucket/path/object

  • VALUE - 用于加密对象的 32 字节 RAW Base64 编码数据密钥。

例如:

# RawBase64-Encoded string "mybucket32byteencryptionkeyssec"
--enc-c "myminio/mybucket/prefix/object.obj=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"

你可以通过重复该参数来指定多个加密密钥。

也可以指定某个前缀路径,对该路径下所有匹配对象应用加密:

--enc-c "myminio/mybucket/prefix/=bXlidWNrZXQzMmJ5dGVlbmNyeXB0aW9ua2V5c3NlYwo"

Note

MinIO 强烈不建议在生产负载中使用 SSE-C 加密。 请改用 --enc-kms 参数启用 SSE-KMS,或使用 --enc-s3 参数启用 SSE-S3。

--json-input
Optional

.json.ndjson 输入对象的数据格式。 将 JSON 内容类型指定为 type=<VALUE>。 值可以是:

更多信息请参阅 S3 API JSONInput

--json-output
Optional

.json 输出的数据格式。 支持 rd=value 键,其中 rd 是 JSON 文档的 RecordDelimiter

省略该参数则使用默认换行符 \n

更多信息请参阅 S3 API JSONOutput

--recursive, r
Optional

使用 --query SQL 语句递归搜索指定的 ALIAS 目录。

全局标志

此命令支持 全局标志 中的任意选项。

示例

选择存储桶内所有对象的所有列

mc sql--recursive--query 选项结合使用,可将查询应用到存储桶中的所有对象:

mc sql --recursive --query "select * from S3Object" ALIAS/PATH
  • ALIAS 替换为 MinIO 部署的 alias

  • PATH 替换为 MinIO 部署上存储桶的路径。

在对象上运行聚合查询

mc sql--query 选项结合使用,可查询 MinIO 部署上的对象:

mc sql --query "select count(s.power) from S3Object" ALIAS/PATH
  • ALIAS 替换为 MinIO 部署的 alias

  • PATH 替换为 MinIO 部署上对象的路径。

行为

输入格式

mc sql 支持以下输入格式:

输入格式类型

类型

content-type

.csv

text/csv

.json

application/json

.parquet

对于 .csv 文件类型,使用 mc sql --csv-input 指定 CSV 数据格式。 有关 CSV 格式字段的更多信息,请参阅 CSV 格式字段

对于 .json 文件类型,使用 mc sql --json-input 指定 JSON 数据格式。

对于 .parquet 文件类型,mc sql 会自动解析数据格式。

mc sql 通过目标对象的文件扩展名判断类型。 例如,名为 data.json 的对象会被解释为 JSON 文件。

如果对象具有合适的 content-type,你也可以查询受支持类型但扩展名不同的数据。 更多信息请参阅 mc cp --attr

CSV 格式字段

下表列出了可用于 mc sql --csv-inputmc sql --csv-output 的有效键值对。 某些键值对仅适用于 --csv-input。 有关 S3 CSV 格式的更多信息,请参阅 S3 API CSVInput 文档。

--csv-input

说明

rd

用于分隔输入 .csv 文件中每条记录(行)的字符。

对应 S3 API CSVInput 中的 RecordDelimiter

fd

用于分隔一条记录中各字段的字符。默认为 ,

对应 S3 API CSVInput 中的 FieldDelimeter

qc

fd 字符是字段值的一部分时,用于转义的字符。默认为 "

对应 S3 API CSVInput 中的 QuoteCharacter

qec

在已转义值内部,用于转义引号 " 字符的字符。

对应 S3 API CSVInput 中的 QuoteEscapeCharacter

fh

.csv 文件第一行的内容类型。

指定以下受支持值之一:

  • NONE - 第一行不是表头。

  • IGNORE - 忽略第一行。

  • USE - 第一行是表头。

对于 NONEIGNORE,你必须在 --query 语句中指定列位置 _# 来标识列。

对于 USE,你可以在 --query 语句中指定表头值来标识列。

对应 S3 API CSVInput 中的 FieldHeaderInfo

cc

用于指示应忽略某条记录的字符。 该字符 必须 出现在记录开头。

对应 S3 API CSVInput 中的 Comment

qrd

指定 TRUE 表示字段中可以包含记录分隔符值(rd)。

默认为 FALSE

对应 S3 API CSVInput 中的 AllowQuotedRecordDelimiter

S3 兼容性

mc 命令行工具以兼容 AWS S3 API 为目标构建,并针对 MinIO 和 AWS S3 进行了测试,以验证预期的功能与行为。

对于其他 S3 兼容服务,MinIO 不提供任何保证,因为这些服务的 S3 API 实现未知, 因此不在支持范围内。虽然 mc 命令 可能 仍能按文档说明工作,但此类 用法需要你自行承担风险。