首页 > 解决方案 > 在 Python 脚本中使用 Snowflake SQL 中的变量

问题描述

我正在尝试创建一个包含 Snowflake SQL 中的变量的视图。整个事情都是在 Python 脚本中完成的。最初,我尝试了绑定变量方法,但绑定在视图创建 SQL 中不起作用。我还有其他方法可以继续吗?我已经给出了下面的代码。

代码:

import snowflake.connector as sf
import pandas

ctx = sf.connect (
    user = 'floatinginthecloud89',
    password = '',
    account = 'nq13914.southeast-asia.azure',
    warehouse = 'compute_wh',    
    database = 'util_db',
    schema = 'public'
)
print("Got the context object")
 
cs = ctx.cursor()
print("Got the cursor object")

column1 = 'attr_name';


try:
     row = cs.execute("select listagg(('''' || attr_name || ''''), ',') from util_db.public.TBL_DIM;")
     rows = cs.fetchall()
     for row in rows:
          print(row)
          print(rows)
          
     row1 = cs.execute("""CREATE OR REPLACE table util_db.public.HIERARCHY_VIEW_2 AS SELECT * FROM (SELECT MSTR.PROD_CODE AS PROD_CODE,DIM.ATTR_NAME AS ATTR_NAME,MSTR.ATTR_VALUE AS ATTR_VALUE FROM TBL_DIM DIM INNER JOIN TBL_MSTR MSTR ON DIM.ATTR_KEY=MSTR.ATTR_KEY ) Q
                  PIVOT (MAX (Q.ATTR_VALUE) FOR Q.ATTR_NAME IN (*row))
                  AS P
                  ORDER BY P.PROD_CODE;""")
     rows1 = cs.fetchall()
     for row1 in rows1:
          print(row1)     
          

finally:
     cs.close()     
ctx.close() 

错误:

文件“C:\Users\Anand Singh\anaconda3\lib\site-packages\snowflake\connector\errors.py”,第 179 行,在 default_errorhandler 中引发 error_class(

ProgrammingError: 001003 (42000): SQL 编译错误:第 2 行语法错误,位置 65 意外“行”。

标签: pythonsnowflake-cloud-data-platform

解决方案


查看 Python绑定示例

你的代码出现了,你需要

row1 = cs.execute("""CREATE OR REPLACE table util_db.public.HIERARCHY_VIEW_2 AS 
        SELECT * FROM (
            SELECT MSTR.PROD_CODE AS PROD_CODE,DIM.ATTR_NAME AS ATTR_NAME,MSTR.ATTR_VALUE AS ATTR_VALUE 
            FROM TBL_DIM DIM 
            INNER JOIN TBL_MSTR MSTR 
                ON DIM.ATTR_KEY=MSTR.ATTR_KEY 
        ) Q
        PIVOT (MAX (Q.ATTR_VALUE) FOR Q.ATTR_NAME IN (%s))
        AS P
        ORDER BY P.PROD_CODE;""", row)
        

*row会将许多参数传递给我已更改为构建字符串或分隔为单个字符串的逗号。


推荐阅读