我使用带有 MATCH_BY_COLUMN_NAME 选项的 Snowflake 副本。我们使用 MATCH_BY_COLUMN_NAME 是因为我们有一个非常长且不断变化的列名称列表。有没有办法在加载(或复制编译)时包含带有当前时间戳的 LOAD_TIME 字段?
我尝试添加一个
LOAD_TIME timestamp default current_timestamp()
在目标表中,但由于 MATCH_BY_COLUMN_NAME,复制后我得到了 NULL 值。
请帮忙。谢谢你。
编辑:
复制到:
INCLUDE_METADATA = (column_name = METADATA$field [,column_name = METADATA$field ...])
定义
目标表的现有列与其 METADATA$ 列之间的用户定义映射。此复制选项只能与 MATCH_BY_COLUMN_NAME 复制选项一起使用。 METADATA$ 字段的有效输入包括以下内容:
METADATA$FILENAME METADATA$FILE_ROW_NUMBER METADATA$FILE_CONTENT_KEY METADATA$FILE_LAST_MODIFIED METADATA$START_SCAN_TIME
COPY INTO table_name
FROM @stage_name
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE
INCLUDE_METADATA = (LOAD_TIME = METADATA$START_SCAN_TIME);
这是默认行为,
COPY
将 NULL 插入到其他列中,并且不允许使用转换语法,因此即使定义了默认值也是 NULL。
COPY INTO t
FROM (SELECT CURRENT_TIMESTAMP() AS LOAD_TIME, ...
FROM @stage)
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
-- SQL compilation error: match_by_column_name is not supported with copy transform
复制到:
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
... 注意
如果目标表中存在其他不匹配的列,COPY 操作会将 NULL 值插入到这些列中。这些列必须支持 NULL 值。
COPY 语句不允许在加载期间指定查询来进一步转换数据(即 COPY 转换)。