如何将 Snowflake 主键读入 python

How to read Snowflake primary keys into python

这个问题与另一个问题有点相关:Get List of Primary Key Columns in Snowflake

因为 INFORMATION_SCHEMA.COLUMNS 没有提供关于主键的必要信息。 Snowflake 本身提出的方法,您可以描述 table 后跟 result_scan,当查询是 运行 并行时,它是不可靠的。 我正在考虑使用 SHOW PRIMARY KEYs IN DATABASE。这在从 Snowflake 中查询数据库时非常有效。但是,一旦我尝试在 python 中执行此操作,我就会得到列名称的结果,例如 'Built-in function id'。这在动态生成 sql 语句时没有用。

我使用的代码如下:

SQL_PK = "SHOW PRIMARY KEYS IN DATABASE;"
snowflake_service = SnowflakeService(username=cred["username"], password=cred["password"])
snowflake_service.connect(database=DATABASE,role=ROLE, warehouse=WAREHOUSE)
curs = snowflake_service.cursor
primary_keys = curs.execute(SQL_PK).fetchall()
curs.close()
snowflake_service.connection.close()

我做错了什么吗?甚至可以这样做吗? 或者,当将这些查询作为一个字符串发送时,Snowflake 提供的解决方案是否足够可靠?尽管有许多 table,但需要多次往返才能获得所需的所有数据。

where you would describe the table followed by a result_scan, is unreliable when queries are run in parallel

您可以使用 information_schema.query_history_by_session 搜索特定查询 运行,然后使用检索到的 QUERY_ID.

引用结果集
SHOW PRIMARY KEYS IN DATABASE;

-- find the newest occurence of `SHOW PRIMARY KEYS`:    
SET queryId = (SELECT QUERY_ID
               FROM TABLE(information_schema.query_history_by_session()) 
               WHERE QUERY_TEXT LIKE '%SHOW PRIMARY KEYS IN DATABASE%'
               ORDER BY ENDTIME DESC LIMIT 1);

SELECT * FROM TABLE(RESULT_SCAN($queryId));