问题描述
我正在尝试动态加载表(删除表并加载数据 - 类似于截断和加载)。假设表需要有 4 个字段,ID、Name、SeqNo 和 DtTimeStamp。
数据是从外部暂存的 csv\text 文件中选择的,该文件只有两个字段(ID 和名称)。下面的查询给出了许多列不匹配的错误。如何解决这个问题?
创建或替换表 SOMetaBLENAME(ID NUMBER(38,0),Name VARCHAR(255),SeqNo NUMBER(38,0) NOT NULL AUTOINCREMENT,DtTimeStamp TIMESTAMP_NTZ(9) NOT NULL DEFAULT CURRENT_TIMESTAMP()) AS SELECT A.$1 AS ID,A.$2 AS 名称来自@EXTERNALSTAGE/SOME_FILE.CSV A;
如果你仔细看上面的 sql 语句,我的表有两个额外的字段,需要为它加载的每一行自动填充。但我无法让它工作?
非常感谢任何建议。
提前致谢! 沙迪亚
解决方法
CREATE TABLE … AS SELECT (CTAS)
CREATE TABLE <table_name> ( <col1_name>,<col2_name>,... ) AS SELECT ...
指定的列名数量必须与查询中 SELECT 列表项的数量相匹配;列的类型是从查询产生的类型推断出来的。
要解决它,CTAS 和 INSERT INTO 可以是两个单独的步骤:
CREATE OR REPLACE TABLE SOMETABLENAME(
ID NUMBER(38,0),Name VARCHAR(255),SeqNo NUMBER(38,0) NOT NULL AUTOINCREMENT,DtTimeStamp TIMESTAMP_NTZ(9) NOT NULL DEFAULT CURRENT_TIMESTAMP()
);
-- here INSERT/SELECT have matching column list
INSERT INTO SOMETABLENAME(ID,Name)
SELECT A.$1 AS ID,A.$2 AS Name FROM @EXTERNALSTAGE/SOME_FILE.CSV A;