提问人:Ramakrishna K 提问时间:8/2/2023 最后编辑:marc_sRamakrishna K 更新时间:8/2/2023 访问量:50
Snowflake中的分区语法错误和无法加载默认数据
Cluster By Partitioning Syntax Error in Snowflake and Unable to load default data
问:
我是雪花的新手。当我试图学习雪花时,我遇到了两个问题,即
问题 #1
当我尝试执行以下命令时,出现语法错误
命令:
CREATE OR REPLACE TABLE PUBLIC.CUSTOMER_CLUSTER (
C_CUSTKEY NUMBER(38,0),
C_NAME VARCHAR(25),
C_ADDRESS VARCHAR(40),
C_NATIONKEY NUMBER(38,0),
C_PHONE VARCHAR(15),
C_ACCTBAL NUMBER(12,2),
C_MKTSEGMENT VARCHAR(10),
C_COMMENT VARCHAR(117),
cluster BY (C_NATIONKEY)
);
错误:
语法错误行 11 在位置 0 意外的 ')'
我在功能集群上遇到错误。
问题 #2
insert into public.customer_nocluster
select *
from snowflake_SAMPLE_DATA.TPCH_SF1000.CUSTOMER;
在上面的命令中
customer_nocluster -> table_name
snowflake_SAMPLE_DATA.TPCH_SF1000.CUSTOMER ->
我们从 Snowflake 私有数据(帐户中可用的默认数据)加载数据。
错误:
字符串 'ly pending pinto beans.快速待处理的请求根据愤怒的待处理海豚使用。小心前夕“太长,会被截断。
你能指导我做错的地方吗?
答:
1赞
Simeon Pilgrim
8/2/2023
#1
所以第二个问题:
如果我们发现失败的行:
select * from snowflake_SAMPLE_DATA.TPCH_SF1000.CUSTOMER
where c_comment like 'ly pending pinto beans. quickly pending requests%';
我们得到一行:
该字符串的长度为 111 个字节。
因此,如果 nocluster 的列宽为 110
CREATE OR REPLACE TABLE PUBLIC.CUSTOMER_NOCLUSTER (
C_CUSTKEY NUMBER,
C_NAME VARCHAR(25),
C_ADDRESS VARCHAR(40),
C_NATIONKEY NUMBER,
C_PHONE VARCHAR(15),
C_ACCTBAL NUMBER(12,2),
C_MKTSEGMENT VARCHAR(10),
C_COMMENT VARCHAR(110)
);
然后复制进去,我们得到如下内容:
insert into public.customer_nocluster
select --*
C_CUSTKEY
,C_NAME
,C_ADDRESS
,C_NATIONKEY
,C_PHONE
,C_ACCTBAL
,C_MKTSEGMENT
,C_COMMENT
from snowflake_SAMPLE_DATA.TPCH_SF1000.CUSTOMER;
字符串'具有讽刺意味的存款。具有讽刺意味的是,快速定期存款的套餐狡猾地与快速 S' 太长,会被截断
因此,如果我们只取前 110 个字符:
insert into public.customer_nocluster
select --*
C_CUSTKEY
,C_NAME
,C_ADDRESS
,C_NATIONKEY
,C_PHONE
,C_ACCTBAL
,C_MKTSEGMENT
,LEFT(C_COMMENT, 110)
from snowflake_SAMPLE_DATA.TPCH_SF1000.CUSTOMER;
它现在运行得很愉快:
因此,关于“不使用 SELECT *”的 NickW 观点是,select star 按照它们在源表或视图中定义的顺序获取列,如果视图表的定义发生变化,对齐方式可能会被破坏,因此在“生产代码”中始终保持显式是一个好习惯。我在原型设计时使用 SELECT * 来“让它工作”,一旦一切都按预期进行,代码就会变得无聊/安全。
评论
0赞
Ramakrishna K
8/2/2023
非常感谢朝圣者@Simeon我做错了哪里的精彩解释。
评论
create table my_data (col1 int, col2 int) cluster by (col1);
public.customer_nocluster