我是雪花新手。当我尝试学习雪花时,我遇到了两个问题,即
问题#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 ->
我们从雪花私人数据加载数据(帐户中可用的默认数据)。
错误:
将待处理的斑豆串起来。根据愤怒的海豚的说法,快速待处理的请求使用。小心 eve' 太长,会被截断。
你能指导我哪里做错了吗?
所以第二个问题:
如果我们发现失败的行:
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;
现在运行得很开心:
因此,NickW 关于“不要使用 SELECT *”的观点是,select star 按照源表或视图中定义的顺序获取列,如果视图表的定义发生更改,则可以更改对齐方式坏了,所以在“生产代码”中始终明确是一个好习惯。我在原型设计时使用 SELECT * 来“让它工作”,一旦一切都按预期进行,就会使代码变得无聊/安全。