雪花中的无效标识符编程错误
Invalid Identifier programming error in snowflake
我运行正在雪花中执行以下查询,运行没问题。
set id ='TEST_TABLE1';
set time_s = '2021-03-31 06:52:51+00:00';
merge into TEST_STATUS using (select column1 AS TABLENAME,
column2 AS LASTUPDATED from values ($id,$time_s)) tt
on TEST_STATUS.TABLE_NAME = tt.TABLENAME
when matched then update set TEST_STATUS.LAST_UPDATED = tt.LASTUPDATED
when not matched then insert (TABLE_NAME, LAST_UPDATED) values (tt.TABLENAME, tt.LASTUPDATED)
但是当我尝试通过 python 代码 运行 时,如下所示:
self.table = 'TEST_TABLE1'
self.timestamp='2021-03-31 06:52:51+00:00';
cmd = f"set id ={self.table};"
cmd2 = f"set time_s = str({timestamp});"
merge_cmd = f"merge into {self.table} using (select column1 AS TABLENAME, column2 AS LASTUPDATED from " \
f"values ($id,$time_s)) tt on {self.table}.TABLE_NAME = tt.TABLENAME when " \
f"matched then update set {self.status_tbl}.LAST_UPDATED = tt.LASTUPDATED when not matched then " \
f"insert (TABLE_NAME, LAST_UPDATED) values (tt.TABLENAME, tt.LASTUPDATED) "
self.snowflake_client.run(cmd)
self.snowflake_client.run(cmd2)
self.snowflake_client.run(merge_cmd)
我遇到异常:
snowflake.connector.errors.ProgrammingError: 000904 (42000): SQL 编译错误:错误行 1 在位置 14
无效标识符 'TEST_TABLE1'
给变量赋值的时候可以加单引号吗?
self.table = 'TEST_TABLE1'
self.timestamp='2021-03-31 06:52:51+00:00'
cmd = f"set id = '{self.table}';"
cmd2 = f"set time_s = 'str({timestamp})';"
merge_cmd = f"merge into {self.table} using (select column1 AS TABLENAME, column2 AS LASTUPDATED from " \
f"values ('$id','$time_s')) tt on {self.table}.TABLE_NAME = tt.TABLENAME when " \
f"matched then update set {self.status_tbl}.LAST_UPDATED = tt.LASTUPDATED when not matched then " \
f"insert (TABLE_NAME, LAST_UPDATED) values (tt.TABLENAME, tt.LASTUPDATED) "
self.snowflake_client.run(cmd)
self.snowflake_client.run(cmd2)
self.snowflake_client.run(merge_cmd)
我运行正在雪花中执行以下查询,运行没问题。
set id ='TEST_TABLE1';
set time_s = '2021-03-31 06:52:51+00:00';
merge into TEST_STATUS using (select column1 AS TABLENAME,
column2 AS LASTUPDATED from values ($id,$time_s)) tt
on TEST_STATUS.TABLE_NAME = tt.TABLENAME
when matched then update set TEST_STATUS.LAST_UPDATED = tt.LASTUPDATED
when not matched then insert (TABLE_NAME, LAST_UPDATED) values (tt.TABLENAME, tt.LASTUPDATED)
但是当我尝试通过 python 代码 运行 时,如下所示:
self.table = 'TEST_TABLE1'
self.timestamp='2021-03-31 06:52:51+00:00';
cmd = f"set id ={self.table};"
cmd2 = f"set time_s = str({timestamp});"
merge_cmd = f"merge into {self.table} using (select column1 AS TABLENAME, column2 AS LASTUPDATED from " \
f"values ($id,$time_s)) tt on {self.table}.TABLE_NAME = tt.TABLENAME when " \
f"matched then update set {self.status_tbl}.LAST_UPDATED = tt.LASTUPDATED when not matched then " \
f"insert (TABLE_NAME, LAST_UPDATED) values (tt.TABLENAME, tt.LASTUPDATED) "
self.snowflake_client.run(cmd)
self.snowflake_client.run(cmd2)
self.snowflake_client.run(merge_cmd)
我遇到异常:
snowflake.connector.errors.ProgrammingError: 000904 (42000): SQL 编译错误:错误行 1 在位置 14 无效标识符 'TEST_TABLE1'
给变量赋值的时候可以加单引号吗?
self.table = 'TEST_TABLE1'
self.timestamp='2021-03-31 06:52:51+00:00'
cmd = f"set id = '{self.table}';"
cmd2 = f"set time_s = 'str({timestamp})';"
merge_cmd = f"merge into {self.table} using (select column1 AS TABLENAME, column2 AS LASTUPDATED from " \
f"values ('$id','$time_s')) tt on {self.table}.TABLE_NAME = tt.TABLENAME when " \
f"matched then update set {self.status_tbl}.LAST_UPDATED = tt.LASTUPDATED when not matched then " \
f"insert (TABLE_NAME, LAST_UPDATED) values (tt.TABLENAME, tt.LASTUPDATED) "
self.snowflake_client.run(cmd)
self.snowflake_client.run(cmd2)
self.snowflake_client.run(merge_cmd)