我需要删除一些列并将雪花表中的数据大写。 为此,我需要遍历所有目录/数据库,其各自的模式以及表。 我需要在python中列出目录架构,然后再列出表格,之后再通过SQL查询来进行操作。
如何进行此操作?
1。列出所有目录名称
2。列出所有架构名称
3。列出所有表名
我已经使用python雪花连接器建立了连接
答案 0 :(得分:0)
此信息的最佳来源是Snowflake提供的SNOWFLAKE.ACCOUNT_USAGE
分享中。您需要将特权授予与Python连接所使用的任何角色。不过,从那里可以看到以下视图:DATABASES
,SCHEMATA
,TABLES
等。
答案 1 :(得分:0)
最简单的方法是遵循以下过程
show databases;
select "name" from table(result_scan(last_query_id()));
这将为您提供数据库列表。将它们放在列表中。遍历此列表并在每个项目上执行以下操作:
use <DBNAME>;
show schemas;
select "name" from table(result_scan(last_query_id()));
获取架构列表
use schema <SchemaName>;
show tables;
select "name" from table(result_scan(last_query_id()));
获取表列表,然后运行查询。
答案 2 :(得分:0)
您可能不需要result_scan。最近,我创建了一个python程序来列出Snowflake中所有表的所有列。我的要求是验证每列并计算这些列的一些数字统计量。我只能使用“显示列”来做到这一点。我已经开源了一些常见的雪花操作,可以在这里
https://github.com/Infosys/Snowflake-Python-Development-Framework
您可以克隆此代码,然后使用此框架创建python程序以按如下所示列出列,然后您可以对列详细信息进行任何操作
##
from utilities.sf_operations import Snowflakeconnection
connection = Snowflakeconnection(profilename ='snowflake_host')
sfconnectionresults = connection.get_snowflake_connection()
sfconnection = sfconnectionresults.get('connection')
statuscode = sfconnectionresults.get('statuscode')
statusmessage = sfconnectionresults.get('statusmessage')
print(sfconnection,statuscode,statusmessage)
snow_sql = 'SHOW COLUMNS;'
queryresult = connection.execute_snowquery(sfconnection,snow_sql);
print(queryresult['result'])
print('column_name|table_name|column_attribute')
print('---------------------------------------------')
for rows in queryresult['result']:
table_name = rows[0]
schema_name = rows[1]
column_name = rows[2]
column_attribute = rows[3]
is_Null = rows[4]
default_Value = rows[5]
kind = rows[6]
expression = rows[7]
comment = rows[8]
database_name = rows[9]
autoincrement = rows[10]
print(column_name+'|'+table_name+'|'+column_attribute)