Json 如果未提供列列表,则Redshift COPY命令将忽略表的默认值
我有一个表,Json 如果未提供列列表,则Redshift COPY命令将忽略表的默认值,json,amazon-web-services,copy,amazon-redshift,Json,Amazon Web Services,Copy,Amazon Redshift,我有一个表,myTable,它有一些带有默认值的列 我有一个json文件,jsonfile.json,其中包含该表的数据,该表中的每个字段都没有值 当我尝试执行这样的复制时: COPY myTable from 's3://bucket/jsonfile.json' IAM_ROLE 'arn:aws:iam::111111111111:role/redshift-role' FORMAT AS JSON 'auto' GZIP COPY myTable(a, b, c) --doesn'
myTable
,它有一些带有默认值的列
我有一个json文件,jsonfile.json
,其中包含该表的数据,该表中的每个字段都没有值
当我尝试执行这样的复制时:
COPY myTable
from 's3://bucket/jsonfile.json'
IAM_ROLE 'arn:aws:iam::111111111111:role/redshift-role'
FORMAT AS JSON 'auto'
GZIP
COPY myTable(a, b, c) --doesn't even have to have the full column list
from 's3://bucket/jsonfile.json'
IAM_ROLE 'arn:aws:iam::111111111111:role/redshift-role'
FORMAT AS JSON 'auto'
GZIP
文件中缺少的字段应允许表在复制时设置其默认值,但将值设置为null或空
如果我改为执行如下复制:
COPY myTable
from 's3://bucket/jsonfile.json'
IAM_ROLE 'arn:aws:iam::111111111111:role/redshift-role'
FORMAT AS JSON 'auto'
GZIP
COPY myTable(a, b, c) --doesn't even have to have the full column list
from 's3://bucket/jsonfile.json'
IAM_ROLE 'arn:aws:iam::111111111111:role/redshift-role'
FORMAT AS JSON 'auto'
GZIP
然后,表中具有默认值的列将设置为其默认值
我四处搜索,没有发现任何描述这一点的东西,或者至少我知道这是一个场景
以前有人看到过吗?你应该发布一些示例数据,让事情更清楚。重要的是要记住,对于文本,空字符串和NULL是不同的。空字符串是一个不为NULL的值,只有在没有为列指定值的情况下才会指定默认值。那么,在数据中,源文件中没有数据的字段是空字符串吗?我希望如此,但展示示例数据将澄清这一点。有一个复制JSON文件的选项,该选项将空字符串映射为NULL——“EMPTYASNULL”。如果我的假设是正确的,这可以解决您的问题。您使用的默认值类型是什么<代码>默认值,
标识
,或默认生成为标识的
我怀疑解释将取决于加载行时的预期行为,而这又取决于使用的默认类型