如何将 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));
这个问题与另一个问题有点相关: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));