如何处理 Snowflake 中列名中的数字
How to handle numbers in column names in Snowflake
我正在将 SQL 服务器表转换为 snowflake,一些列名称中包含数字,SQL 服务器接受这些数字,但 snowflake 不接受。他们保留相同的名称很重要。有没有人知道如何解决这个语法问题?
--- ms sql server syntax ---
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
proc_cd varchar(7) COLLATE Latin1_General_CI_AS NOT NULL,
PROC_SRV_TYP_CD varchar(3) COLLATE Latin1_General_CI_AS NULL,
clm_cnt bigint NULL,
[0_mods_clm_cnt] bigint NULL, --- columns with numbers
[0_mods_clm_pct] decimal(5,4) NULL,
[1_mods_clm_cnt] bigint NULL,
[1_mods_clm_pct] decimal(5,4) NULL,
[2_mods_clm_cnt] bigint NULL,
[2_mods_clm_pct] decimal(5,4) NULL,
[3_mods_clm_cnt] bigint NULL,
[3_mods_clm_pct] decimal(5,4) NULL,
[4_mods_clm_cnt] bigint NULL,
[4_mods_clm_pct] decimal(5,4) NULL,
mods_var_mode1 varchar(12) COLLATE Latin1_General_CI_AS NULL,
mods_var_mode1_clm_cnt bigint NULL,
mods_var_mode2 varchar(12) COLLATE Latin1_General_CI_AS NULL,
mods_var_mode2_clm_cnt bigint NULL,
mods_var_mode3 varchar(12) COLLATE Latin1_General_CI_AS NULL,
mods_var_mode3_clm_cnt bigint NULL,
mods_var_3_mode_cnt bigint NULL,
mods_var_3_mode_pct decimal(5,4) NULL,
any_mods_clm_cnt bigint NULL,
any_mods_clm_pct decimal(5,4) NULL,
impact_mods_clm_cnt bigint NULL,
impact_mods_clm_pct decimal(5,4) NULL,
CONSTRAINT PK__NPR_PROC__A2159902E557C34D PRIMARY KEY (proc_cd)
);
--- snowflake syntax ---
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
proc_cd varchar(7) NOT NULL,
PROC_SRV_TYP_CD varchar(3) ,
clm_cnt bigint,
0_mods_clm_cnt bigint, --- unaccepted number columns
0_mods_clm_pct decimal(5,4),
1_mods_clm_cnt bigint,
1_mods_clm_pct decimal(5,4),
2_mods_clm_cnt bigint,
2_mods_clm_pct decimal(5,4),
3_mods_clm_cnt bigint,
3_mods_clm_pct decimal(5,4),
4_mods_clm_cnt bigint,
4_mods_clm_pct decimal(5,4),
mods_var_mode1 varchar(12) ,
mods_var_mode1_clm_cnt bigint,
mods_var_mode2 varchar(12) ,
mods_var_mode2_clm_cnt bigint,
mods_var_mode3 varchar(12) ,
mods_var_mode3_clm_cnt bigint,
mods_var_3_mode_cnt bigint,
mods_var_3_mode_pct decimal(5,4),
any_mods_clm_cnt bigint,
any_mods_clm_pct decimal(5,4),
impact_mods_clm_cnt bigint,
impact_mods_clm_pct decimal(5,4)
);
错误信息:
SQL compilation error: syntax error line 5 at position 1 unexpected '0'.
评论说得对。为包含数字的列添加双引号。
简体原文,语法错误:
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
clm_cnt bigint,
0_mods_clm_cnt bigint, --- unaccepted number columns
0_mods_clm_pct decimal(5,4)
已用引号修复:
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
clm_cnt bigint,
"0_mods_clm_cnt" bigint, --- unaccepted number columns
"0_mods_clm_pct" decimal(5,4)
)
请注意,现在您在引用这些列时始终需要添加引号并输入小写字母:
select clm_cnt, "0_mods_clm_cnt"
from NPR_PROC_CD_MODS_IMPACT
创建或替换 TABLE NPR_PROC_CD_MODS_IMPACT (
proc_cd varchar(7) 不为空,
PROC_SRV_TYP_CD 变量(3) ,
clm_cnt 大整数,
"0_mods_clm_cnt" bigint, --- 不接受的数字列
"0_mods_clm_pct" 十进制(5,4),
“1_mods_clm_cnt” bigint,
"1_mods_clm_pct" 十进制(5,4),
“2_mods_clm_cnt” bigint,
"2_mods_clm_pct" 十进制(5,4),
“3_mods_clm_cnt” bigint,
"3_mods_clm_pct" 十进制(5,4),
“4_mods_clm_cnt” bigint,
"4_mods_clm_pct" 十进制(5,4),
mods_var_mode1 变量(12) ,
mods_var_mode1_clm_cnt bigint,
mods_var_mode2 变量(12),
mods_var_mode2_clm_cnt bigint,
mods_var_mode3 变量(12) ,
mods_var_mode3_clm_cnt bigint,
mods_var_3_mode_cnt 大整数,
mods_var_3_mode_pct 十进制(5,4),
any_mods_clm_cnt bigint,
any_mods_clm_pct十进制(5,4),
impact_mods_clm_cnt bigint,
impact_mods_clm_pct 十进制(5,4)
);
select 来自 NPR_PROC_CD_MODS_IMPACT
的“0_mods_clm_pct”
我正在将 SQL 服务器表转换为 snowflake,一些列名称中包含数字,SQL 服务器接受这些数字,但 snowflake 不接受。他们保留相同的名称很重要。有没有人知道如何解决这个语法问题?
--- ms sql server syntax ---
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
proc_cd varchar(7) COLLATE Latin1_General_CI_AS NOT NULL,
PROC_SRV_TYP_CD varchar(3) COLLATE Latin1_General_CI_AS NULL,
clm_cnt bigint NULL,
[0_mods_clm_cnt] bigint NULL, --- columns with numbers
[0_mods_clm_pct] decimal(5,4) NULL,
[1_mods_clm_cnt] bigint NULL,
[1_mods_clm_pct] decimal(5,4) NULL,
[2_mods_clm_cnt] bigint NULL,
[2_mods_clm_pct] decimal(5,4) NULL,
[3_mods_clm_cnt] bigint NULL,
[3_mods_clm_pct] decimal(5,4) NULL,
[4_mods_clm_cnt] bigint NULL,
[4_mods_clm_pct] decimal(5,4) NULL,
mods_var_mode1 varchar(12) COLLATE Latin1_General_CI_AS NULL,
mods_var_mode1_clm_cnt bigint NULL,
mods_var_mode2 varchar(12) COLLATE Latin1_General_CI_AS NULL,
mods_var_mode2_clm_cnt bigint NULL,
mods_var_mode3 varchar(12) COLLATE Latin1_General_CI_AS NULL,
mods_var_mode3_clm_cnt bigint NULL,
mods_var_3_mode_cnt bigint NULL,
mods_var_3_mode_pct decimal(5,4) NULL,
any_mods_clm_cnt bigint NULL,
any_mods_clm_pct decimal(5,4) NULL,
impact_mods_clm_cnt bigint NULL,
impact_mods_clm_pct decimal(5,4) NULL,
CONSTRAINT PK__NPR_PROC__A2159902E557C34D PRIMARY KEY (proc_cd)
);
--- snowflake syntax ---
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
proc_cd varchar(7) NOT NULL,
PROC_SRV_TYP_CD varchar(3) ,
clm_cnt bigint,
0_mods_clm_cnt bigint, --- unaccepted number columns
0_mods_clm_pct decimal(5,4),
1_mods_clm_cnt bigint,
1_mods_clm_pct decimal(5,4),
2_mods_clm_cnt bigint,
2_mods_clm_pct decimal(5,4),
3_mods_clm_cnt bigint,
3_mods_clm_pct decimal(5,4),
4_mods_clm_cnt bigint,
4_mods_clm_pct decimal(5,4),
mods_var_mode1 varchar(12) ,
mods_var_mode1_clm_cnt bigint,
mods_var_mode2 varchar(12) ,
mods_var_mode2_clm_cnt bigint,
mods_var_mode3 varchar(12) ,
mods_var_mode3_clm_cnt bigint,
mods_var_3_mode_cnt bigint,
mods_var_3_mode_pct decimal(5,4),
any_mods_clm_cnt bigint,
any_mods_clm_pct decimal(5,4),
impact_mods_clm_cnt bigint,
impact_mods_clm_pct decimal(5,4)
);
错误信息:
SQL compilation error: syntax error line 5 at position 1 unexpected '0'.
评论说得对。为包含数字的列添加双引号。
简体原文,语法错误:
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
clm_cnt bigint,
0_mods_clm_cnt bigint, --- unaccepted number columns
0_mods_clm_pct decimal(5,4)
已用引号修复:
CREATE TABLE naviguard.dbo.NPR_PROC_CD_MODS_IMPACT (
clm_cnt bigint,
"0_mods_clm_cnt" bigint, --- unaccepted number columns
"0_mods_clm_pct" decimal(5,4)
)
请注意,现在您在引用这些列时始终需要添加引号并输入小写字母:
select clm_cnt, "0_mods_clm_cnt"
from NPR_PROC_CD_MODS_IMPACT
创建或替换 TABLE NPR_PROC_CD_MODS_IMPACT ( proc_cd varchar(7) 不为空, PROC_SRV_TYP_CD 变量(3) , clm_cnt 大整数, "0_mods_clm_cnt" bigint, --- 不接受的数字列 "0_mods_clm_pct" 十进制(5,4), “1_mods_clm_cnt” bigint, "1_mods_clm_pct" 十进制(5,4), “2_mods_clm_cnt” bigint, "2_mods_clm_pct" 十进制(5,4), “3_mods_clm_cnt” bigint, "3_mods_clm_pct" 十进制(5,4), “4_mods_clm_cnt” bigint, "4_mods_clm_pct" 十进制(5,4), mods_var_mode1 变量(12) , mods_var_mode1_clm_cnt bigint, mods_var_mode2 变量(12), mods_var_mode2_clm_cnt bigint, mods_var_mode3 变量(12) , mods_var_mode3_clm_cnt bigint, mods_var_3_mode_cnt 大整数, mods_var_3_mode_pct 十进制(5,4), any_mods_clm_cnt bigint, any_mods_clm_pct十进制(5,4), impact_mods_clm_cnt bigint, impact_mods_clm_pct 十进制(5,4) );
select 来自 NPR_PROC_CD_MODS_IMPACT
的“0_mods_clm_pct”