文档

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-input 和 mc 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 - 第一行是表头。

对于 NONE 或 IGNORE,你必须在 --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 命令 可能 仍能按文档说明工作,但此类 用法需要你自行承担风险。