MinIO 客户端 mc sql 命令提供了一个 S3 选择接口,用于对指定的 S3 兼容服务中的对象执行 SQL 查询。语法如下:
C:\> mc sql -h NAME: mc sql - run sql queries on objects USAGE: mc sql [FLAGS] TARGET [TARGET...] FLAGS: --query value, -e value sql query expression (default: "select * from s3object") --recursive, -r sql query recursively --csv-input value csv input serialization option --json-input value json input serialization option --compression value input compression type --csv-output value csv output serialization option --csv-output-header value optional csv output header --json-output value json output serialization option --encrypt-key value encrypt/decrypt objects (using server-side encryption with customer provided keys) --config-dir value, -C value path to configuration folder (default: "C:\\Users\\Administrator\\mc") --quiet, -q disable progress bar display --no-color disable color theme --json enable JSON lines formatted output --debug enable debug output --insecure disable SSL certificate verification --help, -h show help ENVIRONMENT VARIABLES: MC_ENCRYPT_KEY: list of comma delimited prefix=secret values SERIALIZATION OPTIONS: For query serialization options, refer to https://docs.min.io/docs/minio-client-complete-guide#sql
要在指定的 TARGET 目录或对象上执行的 SQL 语句,将整个 SQL 查询用双引号 “"”。
默认为 “select * from s3object”。
使用 --query SQL 语句递归搜索指定的 TARGET 目录。
.csv 输入对象的数据格式。指定一串以逗号分隔的 key=value,... 对。
.json 输入对象的数据格式。将 JSON 内容的类型指定为 type=<VALUE>。该值可以是:
DOCUMENT - JSON document.
LINES - JSON lines.
输入对象的压缩类型。指定以下支持的值之一:
GZIP
BZIP2
NONE (default)
.csv 输出的数据格式。指定一串以逗号分隔的 key=value,... 对。
.csv 输出文件的标题行。将一串逗号分隔的字段指定为 field1,field2,....
省略输出没有标题行的 .csv。
.json 输出的数据格式。 支持 rd=value 键,其中 rd 是 JSON 文档的 RecordDelimiter。
省略使用默认换行符\n。
用于使用客户端密钥 (SSE-C) 执行服务器端加密的加密密钥。 将逗号分隔的键值对指定为 KEY=VALUE,....
对于 KEY,指定与 S3 兼容的服务别名和存储桶的完整路径,包括任何存储桶前缀。用正斜杠 \ 分隔别名和存储桶路径。例如,play/mybucket
对于 VALUE,指定要用于为 KEY 指定的存储桶或存储桶前缀中的加密对象的数据密钥。
--encrypt-key 可以使用 MC_ENCRYPT_KEY 环境变量来填充加密键值对列表,作为在命令行中指定它们的替代方法。
mc sql 命令支持以下输入格式:
.csv
.json
.parquet
对于 .csv 文件类型,使用 mc sql --csv-input 来指定 CSV 数据格式。
对于 .json 文件类型,使用 mc sql --json-input 来指定 JSON 数据格式。
对于 .parquet 文件类型,mc sql 自动解释数据格式。
下表列出了用于 mc sql --csv-input 和 mc sql --csv-output 的有效键值对。 某些密钥对仅对 --csv-input 有效。有关 S3 CSV 格式的更多信息,请参阅 S3 API CSVInput 的文档。
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 中的注释。
qrd:只读,指定 TRUE 以指示字段可能包含记录分隔符值 (rd)。默认为 FALSE。对应于 S3 API CSVInput 中的 AllowQuotedRecordDelimiter。
创建一个名为 students.csv 的文件,该文件内容如下:
NUM,NAME,SEX,AGE,SCORE 1000,Abel,male,20,537 2000,Lucy,female,21,566 3000,Tom,male,19,498
将保存后的 students.csv 文件上传到 MinIO 的 files 存储桶。命令如下:
D:\server\minio>mc cp students.csv local/files students.csv: 94 B / 94 B [=============================================================] 4.92 KiB/s 0s D:\server\minio>mc ls local/files [2021-07-10 10:32:23 CST] 443B ping.txt [2021-07-10 08:58:00 CST] 152B start-minio.bat [2021-07-12 12:41:03 CST] 94B students.csv
(1)在 AWS S3 上以递归方式对一组对象运行查询。
D:\server\minio>mc sql --recursive --query "select * from S3Object" local/files 1000,Abel,male,20,537 2000,Lucy,female,21,566 3000,Tom,male,19,498 D:\server\minio>mc sql --query "select * from S3Object" local/files/students.csv 1000,Abel,male,20,537 2000,Lucy,female,21,566 3000,Tom,male,19,498
(2)对 MinIO 上的对象运行查询。
C:\> mc sql --query "select count(s.power) from S3Object" myminio/iot-devices/power-ratio.csv
(3)使用客户提供的密钥对加密对象运行查询。
C:\> mc sql --encrypt-key "myminio/iot-devices=32byteslongsecretkeymustbegiven1" \ --query "select count(s.power) from S3Object s" myminio/iot-devices/power-ratio-encrypted.csv
(4)使用 gzip 格式对 MinIO 上的对象运行查询; 作为字段分隔符,换行符作为记录分隔符和要使用的文件头
C:\> mc sql --compression GZIP --csv-input "rd=\n,fh=USE,fd=;" \ --query "select count(s.power) from S3Object" myminio/iot-devices/power-ratio.csv.gz
(5)使用 gzip 格式对 MinIO 上的对象运行查询;作为字段分隔符,换行符作为记录分隔符和要使用的文件头。
C:\> mc sql --compression GZIP --csv-input "rd=\n,fh=USE,fd=;" \ --json-output "rd=\n\n" --query "select * from S3Object" myminio/iot-devices/data.csv
(6)运行与(5)中相同的查询,但指定 csv 输出标题。如果 --csv-output-headers 指定为 “”,则将 csv 的第一行解释为标题。
C:\> mc sql --compression GZIP --csv-input "rd=\n,fh=USE,fd=;" \ --csv-output "rd=\n" --csv-output-header "device_id,uptime,lat,lon" \ --query "select * from S3Object" myminio/iot-devices/data.csv