我想为雪花表发出DESC TABLE
SQL命令,并使用Azure Databricks,但我不能完全弄清楚!我没有得到任何错误,但也没有得到任何结果。下面是我使用的Python代码:
options_vcp = {
"sfUrl": snowflake_url,
"sfUser": user,
"sfPassword": password,
"sfDatabase": db,
"sfWarehouse": wh,
"sfSchema": sch
}
sfUtils = sc._jvm.net.snowflake.spark.snowflake.Utils
sfUtils.runQuery(options_vcp, "DESC TABLE myTable")
我可以使用"sfDatabase"
,"sfWarehouse"
等值下载Snowflake表,因此它们似乎是正确的。我可以在Snowflake中运行DESC TABLE
命令并得到正确的结果。但是我从databricks得到的唯一输出是:
Out[1]: JavaObject id=o315
有人知道如何显示这个JavaObject
或知道从Databricks运行DESC TABLE
的不同方法吗?
From doc:执行DDL/DML SQL语句:
runQuery方法只返回TRUE或FALSE。它适用于不返回结果集的语句,例如像CREATE TABLE这样的DDL语句和像INSERT、UPDATE和DELETE这样的DML语句。对于返回结果集的语句,如SELECT或SHOW,它是没有用的。
另一种方法是使用INFORMATION_SCHEMA。列视图:
df = spark.read.format(SNOWFLAKE_SOURCE_NAME)
.options(sfOptions)
.option("query", "SELECT * FROM information_schema.columns WHERE table_name ILIKE 'myTable'")
.load()
相关:将数据从雪花移动到Spark:
当使用dataframe时,Snowflake连接器只支持SELECT查询。
使用笔记
目前,连接器在使用dataframe时不支持其他类型的查询(例如SHOW或DESC或DML语句)。
我建议在select语句中使用get_ddl()来获取对象定义:
https://docs.snowflake.com/en/sql-reference/functions/get_ddl.html