COPY INTO <table>
COPY INTO 允许您从以下位置的文件加载数据:
- User / Internal / External stages:请参阅 什么是 Stage? 以了解 Databend 中的 stages。
- 在存储服务中创建的 Buckets 或 containers。
- 可以通过 URL 访问文件的远程服务器(以“https://...”开头)。
- IPFS.
另请参阅:COPY INTO <location>
语法
COPY INTO [<database_name>.]<table_name>
FROM { userStage | internalStage | externalStage | externalLocation |
( SELECT [<file_col> ... ]
FROM { userStage | internalStage | externalStage } ) }
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = (
FORMAT_NAME = '<your-custom-format>'
| TYPE = { CSV | TSV | NDJSON | PARQUET | ORC } [ formatTypeOptions ]
) ]
[ copyOptions ]
FROM ...
FROM 子句指定源位置(user stage、internal stage、external stage 或 external location),COPY INTO 命令将使用该位置将数据加载到指定的表中。您还可以嵌套 SELECT ... FROM 子查询来转换要加载的数据。有关更多信息,请参见 加载时转换数据。
当您从 staged file 加载数据并且 stage 路径包含空格或括号等特殊字符时,您可以将整个路径用单引号引起来,如以下 SQL 语句所示:
COPY INTO mytable FROM 's3://mybucket/dataset(databend)/' ... COPY INTO mytable FROM 's3://mybucket/dataset databend/' ...
userStage
userStage ::= @~[/<path>]
internalStage
internalStage ::= @<internal_stage_name>[/<path>]
externalStage
externalStage ::= @<external_stage_name>[/<path>]
externalLocation
- Amazon S3-like Storage
- Azure Blob Storage
- Google Cloud Storage
- Alibaba Cloud OSS
- Tencent Cloud Object Storage
- HDFS
- WebHDFS
- Remote Files
- IPFS
externalLocation ::=
's3://<bucket>[<path>]'
CONNECTION = (
<connection_parameters>
)
有关访问类似 Amazon S3 的存储服务可用的连接参数,请参见 连接参数。
externalLocation ::=
'azblob://<container>[<path>]'
CONNECTION = (
<connection_parameters>
)
有关访问 Azure Blob Storage 可用的连接参数,请参见 连接参数。
externalLocation ::=
'gcs://<bucket>[<path>]'
CONNECTION = (
<connection_parameters>
)
有关访问 Google Cloud Storage 可用的连接参数,请参见 连接参数。
externalLocation ::=
'oss://<bucket>[<path>]'
CONNECTION = (
<connection_parameters>
)
有关访问阿里云 OSS 可用的连接参数,请参见 连接参数。
externalLocation ::=
'cos://<bucket>[<path>]'
CONNECTION = (
<connection_parameters>
)
有关访问腾讯云对象存储可用的 连接参数,请参见 连接参数。
externalLocation ::=
'hdfs://<endpoint_url>[<path>]'
CONNECTION = (
<connection_parameters>
)
有关访问 HDFS 可用的连接参数,请参见 连接参数。
externalLocation ::=
'webhdfs://<endpoint_url>[<path>]'
CONNECTION = (
<connection_parameters>
)
有关访问 WebHDFS 可用的连接参数,请参见 连接参数。
externalLocation ::=
'https://<url>'
您可以使用 glob 模式指定多个文件 。例如,使用
ontime_200{6,7,8}.csv
表示ontime_2006.csv
、ontime_2007.csv
、ontime_2008.csv
。ontime_200[6-8].csv
表示ontime_2006.csv
、ontime_2007.csv
、ontime_2008.csv
。
externalLocation ::=
'ipfs://<your-ipfs-hash>'
CONNECTION = (ENDPOINT_URL = 'https://<your-ipfs-gateway>')
FILES
FILES 指定要加载的一个或多个文件名(以逗号分隔)。
PATTERN
一个基于 PCRE2 的正则表达式模式字符串,用单引号括起来,用于指定要匹配的文件名。有关 PCRE2 语法,请参见 http://www.pcre.org/current/doc/html/pcre2syntax.html。有关使用 PATTERN 参数过滤文件的示例和有用提示,请参见 示例 4:使用 Pattern 过滤文件。
FILE_FORMAT
有关详细信息,请参见 输入 & 输出文件格式。
copyOptions
copyOptions ::=
[ SIZE_LIMIT = <num> ]
[ PURGE = <bool> ]
[ FORCE = <bool> ]
[ DISABLE_VARIANT_CHECK = <bool> ]
[ ON_ERROR = { continue | abort | abort_N } ]
[ MAX_FILES = <num> ]
[ RETURN_FAILED_ONLY = <bool> ]
[ COLUMN_MATCH_MODE = { case-sensitive | case-insensitive } ]
参数 | 描述 | 是否必须 |
---|---|---|
SIZE_LIMIT | 指定给定 COPY 语句要加载的最大数据行数。默认为 0 ,表示没有限制。 | 可选 |
PURGE | 如果为 true ,则命令会在文件成功加载到表后清除 Stage 中的文件。默认值:false 。 | 可选 |
FORCE | COPY INTO 通过自动跟踪和防止在默认的 12 小时内重新加载文件来确保幂等性。可以使用 load_file_metadata_expire_hours 设置自定义此时间,以控制文件元数据的过期时间。此参数默认为 false ,表示 COPY INTO 在复制数据时会跳过重复文件。如果为 true ,则不会跳过重复文件。 | 可选 |
DISABLE_VARIANT_CHECK | 如果为 true ,则在 COPY INTO 期间,无效的 JSON 数据会被替换为 null 值。如果为 false (默认值),则 COPY INTO 会在遇到无效的 JSON 数据时失败。 | 可选 |
ON_ERROR | 决定如何处理包含错误的文件:continue 跳过并继续,abort (默认值)在发生错误时终止,abort_N 在错误数 ≥ N 时终止。注意:abort_N 不适用于 Parquet 文件。 | 可选 |
MAX_FILES | 设置要加载的尚未加载的最大文件数。该值可以设置为最多 15,000;任何大于 15,000 的值都将被视为 15,000。 | 可选 |
RETURN_FAILED_ONLY | 设置为 true 时,输出中将仅包含加载失败的文件。默认值:false 。 | 可选 |
COLUMN_MATCH_MODE | (仅适用于 Parquet)确定 COPY INTO 期间的列名匹配是否区分大小写 case-sensitive 或不区分大小写 case-insensitive (默认值)。 | 可选 |
当导入大量数据(例如日志)时,建议将 PURGE
和 FORCE
都设置为 true
。这可以确保高效的数据导入,而无需与 Meta 服务器交互(更新已复制文件集)。但是,重要的是要注意这可能会导致重复的数据导入。
输出
COPY INTO 提供了数据加载结果的摘要,包含以下列:
列 | 类型 | 是否可为空 | 描述 |
---|---|---|---|
FILE | VARCHAR | 否 | 源文件的相对路径。 |
ROWS_LOADED | INT | 否 | 从源文件加载的行数。 |
ERRORS_SEEN | INT | 否 | 源文件中的错误行数。 |
FIRST_ERROR | VARCHAR | 是 | 在源文件中找到的第一个错误。 |
FIRST_ERROR_LINE | INT | 是 | 第一个错误的行号。 |
如果 RETURN_FAILED_ONLY
设置为 true
,则输出将仅包含加载失败的文件。
分布式 COPY INTO
Databend 中的 COPY INTO 功能在集群环境中自动激活分布式执行,从而提高数据加载效率和可扩展性。