mc sql

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

FLAGS 说明

--query, --e

要在指定的 TARGET 目录或对象上执行的 SQL 语句,将整个 SQL 查询用双引号 “"”。

默认为 “select * from s3object”。

--recursive, --r

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

--csv-input

.csv 输入对象的数据格式。指定一串以逗号分隔的 key=value,... 对。

--json-input

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

  • DOCUMENT - JSON document.

  • LINES - JSON lines.

-compression

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

  • GZIP

  • BZIP2

  • NONE (default)

--csv-output

.csv 输出的数据格式。指定一串以逗号分隔的 key=value,... 对。

--csv-output-header

.csv 输出文件的标题行。将一串逗号分隔的字段指定为 field1,field2,....

省略输出没有标题行的 .csv。

--json-output

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

省略使用默认换行符\n。

--encrypt-key

用于使用客户端密钥 (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 自动解释数据格式。

CSV格式字段

下表列出了用于 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
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号