SQL 参考

DML

师成师成· 更新于 2026-09-28· 阅读 5 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

DML

DML 是“Data Manipulation Language”(数据操作语言)的缩写,涉及向表中插入数据以及修改表中的数据。

COPY

将表或查询的结果复制到文件中。支持的文件格式有 parquet、csv、json 和 arrow。

COPY { table_name | query }
TO 'file_name'
[ STORED AS format ]
[ PARTITIONED BY column_name [, ...] ]
[ OPTIONS( option [, ... ] ) ]

STORED AS 指定 COPY 命令写入的文件格式。如果未指定该子句,则会尽可能根据文件扩展名推断格式。

PARTITIONED BY 指定用于将输出文件分区到不同的 Hive 风格目录中的列。默认情况下,PARTITIONED BY 中使用的列会从输出中移除。如果希望保留这些列,应设置选项 execution.keep_partition_by_columns true。execution.keep_partition_by_columns 标志也可以通过 SessionConfig 中的 ExecutionOptions 来启用。

输出格式由以下规则按顺序匹配确定:

  1. STORED AS 的值
  2. 文件名扩展名(例如 foo.parquet 表示 PARQUET 格式)

有关有效 OPTIONS 的详细列表,请参阅格式选项。

示例

将 source_table 的内容以 JSON 格式复制到 file_name.json:

> COPY source_table TO 'file_name.json';
+-------+
| count |
+-------+
| 2     |
+-------+

将 source_table 的内容复制到 dir_name 目录下的一个或多个 Parquet 格式文件中:

> COPY source_table TO 'dir_name' STORED AS PARQUET;
+-------+
| count |
+-------+
| 2     |
+-------+

将 source_table 的内容复制为多个目录下的 hive 风格分区 Parquet 文件:

> COPY source_table TO 'dir_name' STORED AS parquet, PARTITIONED BY (column1, column2);
+-------+
| count |
+-------+
| 2     |
+-------+

如果数据在 column1 中包含 x 和 y 两个值,而在 column2 中只包含 a,则输出文件将呈现如下目录结构:

dir_name/
  column1=x/
    column2=a/
      <file>.parquet
      <file>.parquet
      ...
  column1=y/
    column2=a/
      <file>.parquet
      <file>.parquet
      ...

运行查询 SELECT * from source ORDER BY time,并将结果(保持原有顺序)写入名为 output.parquet 的 parquet 文件,其中 parquet 行组大小最大为 10MB:

> COPY (SELECT * from source ORDER BY time) TO 'output.parquet' OPTIONS (MAX_ROW_GROUP_SIZE 10000000);
+-------+
| count |
+-------+
| 2     |
+-------+

INSERT

示例

向表中插入值。

INSERT INTO table_name { VALUES ( expression [, ...] ) [, ...] | query }
> INSERT INTO target_table VALUES (1, 'Foo'), (2, 'Bar');
+-------+
| count |
+-------+
| 2     |
+-------+

评论

登录后参与评论

正在加载评论…