簡體   English   中英

在用戶定義函數中將表名作為參數傳遞

[英]Passing Table Name as Parameter in User Defined Functions

我想創建一個包含參數化查詢的UDF。 由於我想重用此函數,因此我也想參數化表名。 在Snowflake Data Warehouse(或Oracle,因為在語法上有點相似)是否可​​行?

我不認為僅使用SQL就能做到這一點。 關於如何使用Python實現的任何輸入?

在Oracle中,不能將表名用作綁定變量。 查詢是在編譯時而不是運行時解析的。 您必須使用EXECUTE IMMEDIATEdbms_sql

這是一個非常基本的編程問題,與Snowflake無關。 因此,在這里問之前,您應該進行更多調查。 但這是為您提供答案的草圖:

#!/usr/bin/env python

# Connect to Snowflake
# See https://docs.snowflake.net/manuals/user-guide/python-connector-example.html#connecting-
...
con = 
...

# Scan the file to build the table/column info
tables = {}
with open("zz.csv") as f:
    for l in f.readlines():
        tname, cname = l.split(",")
        tables.setdefault(tname.strip(), []).append(cname.strip())

# Run a query for each query
for tname, clist in tables.iteritems():
    query = """select {columns} from {table} 
               group by {columns} 
               having count(*) > 1
            """.format(columns=",".join(clist), table=tname)
    print("Running query: {0}".format(query))
    cur = con.cursor()
    cur.execute(query)
    for rec in cur:
        print("DUPLICATED RECORD: {0}".format(rec))

@MarcinZukowski感謝您提供信息。 是的,我檢查了它,他們計划在六月推出。 我只有查詢來驗證UDF中的PK約束,而不必在UDF中。 我的CSV看起來像這樣,它具有表名稱及其主鍵:

|  Table Name  |  Primary Key  | 
|    Table 1   |     Col1      |  
|    Table 1   |     Col2      |
|    Table 1   |     Col3      | 
|    Table 2   |     Col11     | 
|    Table 2   |     Col12     |

我想從此CSV對每個表執行以下查詢。 這里的表名可以是單個參數,但由於表可以具有1個或多個主鍵,因此列名必須有所不同。

select Col1, Col2, Col3 from Table1
group by Col1, Col2, Col3
having count(*)>1 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM