适用于:
Databricks SQL
Databricks Runtime
将文件位置中的数据加载到 Delta 表中。 这是可重试的幂等操作—会跳过已经加载的源位置中的文件。 有关示例,请参阅
使用 COPY INTO 的常见数据加载模式
。
COPY INTO target_table
FROM { source_clause |
( SELECT expression_list FROM source_clause ) }
FILEFORMAT = data_source
[ VALIDATE [ ALL | num_rows ROWS ] ]
[ FILES = ( file_name [, ...] ) | PATTERN = glob_pattern ]
[ FORMAT_OPTIONS ( { data_source_reader_option = value } [, ...] ) ]
[ COPY_OPTIONS ( { copy_option = value } [, ...] ) ]
source_clause
source [ WITH ( [ CREDENTIAL { credential_name |
(temporary_credential_options) } ]
[ ENCRYPTION (encryption_options) ] ) ]
target_table
标识现有的 Delta 表。 target_table 不得包含时态规范。
如果表名称以位置的形式提供(例如 delta.`/path/to/table`
),则 Unity 目录可以控制对写入到的位置的访问。 可以通过以下方式写入到外部位置:
将位置定义为外部位置并提供对该外部位置的 WRITE FILES
权限。
拥有对命名存储凭据的 WRITE FILES
权限,以便提供使用 COPY INTO delta.`/some/location` WITH (CREDENTIAL <named_credential>)
写入到某个位置的授权
有关详细信息,请参阅管理外部位置和存储凭据。
source
要从中加载数据的文件位置。 此位置中的文件必须采用 FILEFORMAT
中指定的格式。 以 URI 的形式提供此位置。
可通过以下命令提供对源位置的访问权限:
credential_name
用于访问或写入存储位置的凭据的可选名称。 仅在文件位置未包含在外部位置中时才使用此凭据。
内联临时凭据。
将源位置定义为外部位置,并通过 Unity 目录提供对外部位置的 READ FILES
权限。
使用带 READ FILES
权限的命名存储凭据,这些权限提供通过 Unity 目录从位置进行读取所需的授权。
如果路径已定义为你有权使用的外部位置,则无需提供内联或命名凭据。 有关详细信息,请参阅管理外部位置和存储凭据。
如果源文件路径为根路径,请在文件路径末尾添加斜杠 (/
),例如 s3://my-bucket/
。
接受的凭据选项如下:
适用于 ADLS Gen2 和 Azure Blob 存储的 AZURE_SAS_TOKEN
适用于 AWS S3 的 AWS_ACCESS_KEY
、AWS_SECRET_KEY
和 AWS_SESSION_TOKEN
接受的加密选项如下:
适用于 AWS S3 的 TYPE = 'AWS_SSE_C'
和 MASTER_KEY
请参阅使用临时凭据通过 COPY INTO 加载数据。
SELECT expression_list
在复制到 Delta 表之前,从源数据中选择指定的列或表达式。 表达式可以是与 SELECT
语句一起使用的任何内容,包括窗口操作。 你只能将聚合表达式用于全局聚合 - 你不能在使用此语法的列上使用 GROUP BY
。
FILEFORMAT = data_source
要加载的源文件的格式。 CSV
、JSON
、AVRO
、ORC
、PARQUET
、TEXT
、BINARYFILE
之一。
VALIDATE
适用于:
Databricks SQL
Databricks Runtime 10.3 及更高版本
要加载到表中的数据会经过验证,但不写入表中。 这些验证包括:
是否可以解析数据。
架构是否与表匹配,或者架构是否需要演变。
是否满足所有可空性和检查约束。
默认是验证所有要加载的数据。 你可以提供要使用 ROWS
关键字验证的行数,例如 VALIDATE 15 ROWS
。 当小于 50 的数字与 ROWS
关键字一起使用时,COPY INTO
语句返回 50 行或更少的数据的预览)。
FILES
要加载的文件名的列表,长度最大为 1000。 无法使用 PATTERN
进行指定。
PATTERN
glob 模式,用于标识要从源目录加载的文件。 无法使用 FILES
进行指定。
ignoreCorruptFiles
类型:Boolean
是否忽略损坏的文件。 如果为 true,则当遇到损坏的文件时,Spark 作业将继续运行,并且仍会返回已读取的内容。 可观测到,如 numSkippedCorruptFiles
中所示
Delta Lake 历史记录的 operationMetrics
列。 在 Databricks Runtime 11.0 及更高版本中可用。
默认值:30false
ignoreMissingFiles
类型:Boolean
是否忽略缺少的文件。 如果为 true,则当遇到缺少的文件时,Spark 作业将继续运行,并且仍会返回已读取的内容。 在 Databricks Runtime 11.0 及更高版本中可用。
默认值: false
(COPY INTO
的 true
)
ModifiedAfter
类型:Timestamp String
,例如 2021-01-01 00:00:00.000000 UTC+0
一个可选时间戳,指示引入其修改时间戳晚于所提供的时间戳的文件。
默认值: 无
modifiedBefore
类型:Timestamp String
,例如 2021-01-01 00:00:00.000000 UTC+0
一个可选时间戳,指示引入其修改时间戳早于所提供的时间戳的文件。
默认值: 无
pathGlobFilter
类型:String
提供用来选择文件的一种潜在 glob 模式。 等效于
COPY INTO
中的 PATTERN
。
默认值: 无
recursiveFileLookup
类型:Boolean
是否在基目录中以递归方式加载数据并跳过分区推理。
默认值:30false
JSON
选项
allowBackslashEscapingAnyCharacter
类型:Boolean
是否允许反斜杠对其后面的任何字符进行转义。 如果未启用,则只能对按 JSON 规范显式列出的字符进行转义。
默认值:30false
allowComments
类型:Boolean
是否允许在分析的内容中使用 Java、C 和 C++ 样式的注释('/'
、'*'
和 '//'
变体)。
默认值:30false
allowNonNumericNumbers
类型:Boolean
是否允许将非数字 (NaN
) 标记集用作合法浮点数字值。
默认值:30true
allowNumericLeadingZeros
类型:Boolean
是否允许整数以附加的(可忽略的)零开头(例如 000001)。
默认值:30false
allowSingleQuotes
类型:Boolean
是否允许使用单引号(撇号字符 '\'
)来引用字符串(名称和字符串值)。
默认值:30true
allowUnquotedControlChars
类型:Boolean
是否允许 JSON 字符串包含未转义的控制字符(值小于 32 的 ASCII 字符,包括制表符和换行符)。
默认值:30false
allowUnquotedFieldNames
类型:Boolean
是否允许使用不带引号的字段名称(JavaScript 允许,但 JSON 规范不允许)。
默认值:30false
badRecordsPath
类型:String
用于记录错误 JSON 记录相关信息的存储文件的路径。
默认值: 无
columnNameOfCorruptRecord
类型:String
用于存储因格式不正确而无法分析的记录的列。 如果用于分析的 mode
设置为 DROPMALFORMED
,则此列将为空。
默认值:30_corrupt_record
dateFormat
类型:String
用于分析日期字符串的格式。
默认值:30yyyy-MM-dd
dropFieldIfAllNull
类型:Boolean
在进行架构推理期间是否忽略所有 null 值或空数组和结构的列。
默认值:30false
encoding 或 charset
类型:String
JSON 文件编码的名称。 有关选项列表,请参阅 java.nio.charset.Charset
。 当 multiline
为 true
时,不能使用 UTF-16
和 UTF-32
。
默认值:30UTF-8
inferTimestamp
类型:Boolean
是否尝试将时间戳字符串推理为 TimestampType
。 设置为
true
时,架构推理可能需要明显更长的时间。
默认值:30false
lineSep
类型:String
两个连续 JSON 记录之间的字符串。
默认值:None,涵盖 \r
、\r\n
和 \n
locale
类型:String
一个 java.util.Locale
标识符。 影响 JSON 中的默认日期、时间戳和十进制分析。
默认值:30US
mode
类型:String
围绕处理格式错误的记录提供的分析程序模式。 'PERMISSIVE'
、
'DROPMALFORMED'
或 'FAILFAST'
中的一项。
默认值:30PERMISSIVE
multiLine
类型:Boolean
JSON 记录是否跨多行。
默认值:30false
prefersDecimal
类型:Boolean
在进行架构推理期间是否将浮点值和双精度值推理为 DecimalType
。
默认值:30false
primitivesAsString
类型:Boolean
是否将数字和布尔值等基元类型推理为 StringType
。
默认值:30false
rescuedDataColumn
类型:String
是否将因数据类型不匹配或架构不匹配(包括列大小写)而无法分析的所有数据收集到单独的列。 使用自动加载程序时,默认包含此列。 有关更多详细信息,请参考什么是补救的数据列?。
默认值: 无
timestampFormat
类型:String
用于分析时间戳字符串的格式。
默认值:30yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
timeZone
类型:String
分析时间戳和日期时要使用的 java.time.ZoneId
。
默认值: 无
CSV
选项
charToEscapeQuoteEscaping
类型:Char
用来对引号的转义字符进行转义的字符。 例如,对于以下记录:[ " a\\", b ]
:
* 如果未定义用来对 '\'
进行转义的字符,则不会分析记录。 分析程序会将字符读取为 [a],[\],["],[,],[ ],[b]
,并引发错误,因为它找不到右引号。
* 如果将用来对 '\'
转义的字符定义为 '\'
,则读取的记录会带有 2 个值:[a\]
和 [b]
。
默认值:30'\0'
columnNameOfCorruptRecord
类型:String
用于存储因格式不正确而无法分析的记录的列。 如果用于分析的 mode
设置为 DROPMALFORMED
,则此列将为空。
默认值:30_corrupt_record
comment
类型:Char
定义表示行注释的字符(位于文本行的开头时)。 请使用 '\0'
来禁用注释跳过。
默认值:30'\u0000'
dateFormat
类型:String
用于分析日期字符串的格式。
默认值:30yyyy-MM-dd
emptyValue
类型:String
空值的字符串表示形式。
默认值:30""
encoding 或 charset
类型:String
CSV 文件编码的名称。 有关选项列表,请参阅 java.nio.charset.Charset
。 当 multiline
为 true
时,不能使用 UTF-16
和 UTF-32
。
默认值:30UTF-8
enforceSchema
类型:Boolean
是否将指定的或推理出的架构强制应用于 CSV 文件。 如果启用此选项,则会忽略 CSV 文件的标题。 默认情况下,当使用自动加载程序来补救数据并允许架构演变时,会忽略此选项。
默认值:30true
escape
类型:Char
分析数据时要使用的转义字符。
默认值:30'\'
标头
类型:Boolean
CSV 文件是否包含标题。 自动加载程序在推理架构时会假定文件具有标题。
默认值:30false
ignoreLeadingWhiteSpace
类型:Boolean
是否忽略每个所分析值的前导空格。
默认值:30false
ignoreTrailingWhiteSpace
类型:Boolean
是否忽略每个所分析值的尾随空格。
默认值:30false
inferSchema
类型:Boolean
是推理所分析 CSV 记录的数据类型,还是假定所有列都是 StringType
类型的。 如果设置为 true
,则需要对数据进行另一轮操作。
默认值:30false
lineSep
类型:String
两个连续 CSV 记录之间的字符串。
默认值:None,涵盖 \r
、\r\n
和 \n
locale
类型:String
一个 java.util.Locale
标识符。 影响 CSV 中的默认日期、时间戳和十进制分析。
默认值:30US
maxCharsPerColumn
类型:Int
要分析的值预期包含的最大字符数。 可用于避免内存错误。 默认为 -1
,表示无限制。
默认值:30-1
maxColumns
类型:Int
记录可以包含的列数的硬限制。
默认值:3020480
mergeSchema
类型:Boolean
是否跨多个文件推理架构并合并每个文件的架构。 已默认在推理架构时为自动加载程序启用。
默认值:30false
mode
类型:String
围绕处理格式错误的记录提供的分析程序模式。 'PERMISSIVE'
、
'DROPMALFORMED'
和 'FAILFAST'
。
默认值:30PERMISSIVE
multiLine
类型:Boolean
CSV 记录是否跨多行。
默认值:30false
nanValue
类型:String
分析 FloatType
和 DoubleType
列时非数字值的字符串表示形式。
默认值:30"NaN"
negativeInf
类型:String
分析 FloatType
或 DoubleType
列时负无穷大的字符串表示形式。
默认值:30"-Inf"
nullValue
类型:String
null 值的字符串表示形式。
默认值:30""
parserCaseSensitive(不推荐使用)
类型:Boolean
读取文件时,将标题中声明的列与架构对齐时是否区分大小写。 对于自动加载程序,此项默认为 true
。 如果启用,则会在 rescuedDataColumn
中补救大小写不同的列。 已不推荐使用此选项,推荐使用 readerCaseSensitive
。
默认值:30false
positiveInf
类型:String
分析 FloatType
或 DoubleType
列时正无穷大的字符串表示形式。
默认值:30"Inf"
quote
类型:Char
当字段分隔符是值的一部分时用于对值进行转义的字符。
默认值:30'\'
readerCaseSensitive
类型:Boolean
指定启用 rescuedDataColumn
时区分大小写的行为。 如果为 true,则拯救名称因大小写而与架构不同的数据列;否则,请以不区分大小写的方式读取数据。
默认值:30true
rescuedDataColumn
类型:String
是否将因数据类型不匹配和架构不匹配(包括列大小写)而无法分析的所有数据收集到单独的列。 使用自动加载程序时,默认包含此列。 有关更多详细信息,请参考什么是补救的数据列?。
默认值: 无
sep 或 delimiter
类型:String
列之间的分隔符字符串。
默认值:30","
skipRows
类型:Int
CSV 文件开头应忽略的行数(包括注释行和空行)。 如果 header
为 true,则标头将是第一个未跳过和未注释的行。
默认值:300
timestampFormat
类型:String
用于分析时间戳字符串的格式。
默认值:30yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
timeZone
类型:String
分析时间戳和日期时要使用的 java.time.ZoneId
。
默认值: 无
unescapedQuoteHandling
类型:String
用于处理未转义的引号的策略。 允许的选项:
* STOP_AT_CLOSING_QUOTE
:如果在输入中发现了未转义的引号,则会累积引号字符并继续将值解析为带引号的值,直至找到右引号。
* BACK_TO_DELIMITER
:如果在输入中发现了未转义的引号,则会将该值视为无引号的值。 这会让分析程序累积当前所分析值的所有字符,直至找到 sep
定义的分隔符。 如果在值中找不到分隔符,则分析程序会继续从输入中累积字符,直到找到分隔符或行尾。
* STOP_AT_DELIMITER
:如果在输入中发现了未转义的引号,则会将该值视为无引号的值。 这会让分析程序累积所有字符,直至在输入中找到 sep
定义的分隔符或找到行尾。
* SKIP_VALUE
:如果在输入中发现了未转义的引号,则将跳过针对给定值所解析的内容(直至找到下一个分隔符),并将改为生成 nullValue
中设置的值。
* RAISE_ERROR
:如果在输入中发现了未转义的引号,则
会引发 TextParsingException
。
默认值:30STOP_AT_DELIMITER
PARQUET
选项
datetimeRebaseMode
类型:String
控制 DATE 和 TIMESTAMP 值在儒略历与外推格里历之间的基本值重定。 允许的值:EXCEPTION
、LEGACY
和
CORRECTED
.
默认值:30LEGACY
int96RebaseMode
类型:String
控制 INT96 时间戳值在儒略历与外推格里历之间的基本值重定。 允许的值:EXCEPTION
、LEGACY
和
CORRECTED
.
默认值:30LEGACY
mergeSchema
类型:Boolean
是否跨多个文件推理架构并合并每个文件的架构。
默认值:30false
readerCaseSensitive
类型:Boolean
指定启用 rescuedDataColumn
时区分大小写的行为。 如果为 true,则拯救名称因大小写而与架构不同的数据列;否则,请以不区分大小写的方式读取数据。
默认值:30true
rescuedDataColumn
类型:String
是否将因数据类型不匹配和架构不匹配(包括列大小写)而无法分析的所有数据收集到单独的列。 使用自动加载程序时,默认包含此列。 有关更多详细信息,请参考什么是补救的数据列?。
默认值: 无
AVRO
选项
avroSchema
类型:String
用户以 Avro 格式提供的可选架构。 读取 Avro 时,可以将此选项设置为一个演变的架构,该架构与实际 Avro 架构兼容但不同。 反序列化架构会与演变的架构保持一致。 例如,如果你设置的演变架构包含一个具有默认值的附加列,则读取结果也会包含该新列。
默认值: 无
datetimeRebaseMode
类型:String
控制 DATE 和 TIMESTAMP 值在儒略历与外推格里历之间的基本值重定。 允许的值:EXCEPTION
、LEGACY
和
CORRECTED
.
默认值:30LEGACY
mergeSchema
类型:Boolean
是否跨多个文件推理架构并合并每个文件的架构。
Avro 的 mergeSchema
不放宽数据类型。
默认值:30false
readerCaseSensitive
类型:Boolean
指定启用 rescuedDataColumn
时区分大小写的行为。 如果为 true,则拯救名称因大小写而与架构不同的数据列;否则,请以不区分大小写的方式读取数据。
默认值:30true
rescuedDataColumn
类型:String
是否将因数据类型不匹配和架构不匹配(包括列大小写)而无法分析的所有数据收集到单独的列。 使用自动加载程序时,默认包含此列。 有关更多详细信息,请参考什么是补救的数据列?。
默认值: 无
BINARYFILE
选项
二进制文件没有任何额外的配置选项。
TEXT
选项