【发布时间】:2021-08-22 02:35:44
【问题描述】:
我想使用 DROP TABLE 删除我的表,但我的 Databricks 上出现错误 JDBC,但如果我使用 SELECT,它不会出现任何错误,我有 2 个不同的函数可以 read_from_synapse和write_to_synapse。
这是我的read_from_synapse,我认为DROP TABLE可以使用查询
def read_from_synapse(sql, url, tempDir):
df = (spark.read
.format("com.databricks.spark.sqldw")
.option("url", url)
.option("tempDir", tempDir)
.option("forwardSparkAzureStorageCredentials", "true")
.option("query", sql)
.load()
)
return df
这是我的write_to_synapse 可以插入表格的脚本
def write_to_synapse(df, table, write_mode, url, tempDir):
df.write
.format("com.databricks.spark.sqldw")
.option("tableOptions", "CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN") # Added at 20200121
.option("url", url)
.option("dbtable", table)
.option("forward_spark_azure_storage_credentials","True")
.option("tempdir", tempDir)
.mode(write_mode)
.save()
更新
我已经尝试过这个链接,但它并没有解决我的问题,它得到了这样的错误
com.databricks.spark.sqldw.SqlDWSideException: Azure Synapse Analytics failed to execute the JDBC query produced by the connector.
这从错误中更详细:
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
<command-1485523310718777> in <module>
----> 1 drop_sdf_sales = azSynapse._delete_from_synapse(drop_sql, tempDir=temp_read_dir)
<command-1485523310718391> in _delete_from_synapse(self, sql, url, tempDir)
5 if not tempDir:
6 tempDir = self.azblob._get_blob_path('04-publish', 'sqlDwReadTempDirs')
----> 7 df = UtilAzSynapse.read_from_synapse(sql, url, tempDir)
8 return df
<command-2362013028695578> in read_from_synapse(sql, url, tempDir)
16 .option("tempDir", tempDir)
17 .option("forwardSparkAzureStorageCredentials", "true")
---> 18 .option("query", sql)
19 .load()
20 )
/databricks/spark/python/pyspark/sql/readwriter.py in load(self, path, format, schema, **options)
182 return self._df(self._jreader.load(self._spark._sc._jvm.PythonUtils.toSeq(path)))
183 else:
【问题讨论】:
-
@Kafels 我认为从你的建议来看它与我的
read_from_synapse脚本有相似之处?因为当我尝试用我的函数DROP TABLE X时,它得到了一个JDBC错误,但我会先尝试,我会更新给你 -
如果你的问题是丢表,是的。它有相似之处。我建议您更新从异常添加堆栈跟踪的问题
-
@Kafels 但我想问一下,是否可以从 Azure Synapse 等数据块中删除外部表?因为当我看到这个documentation 时,它没有解释它可以删除一些表或从中删除一些行?
-
我认为您应该对
delete或drop采取另一种方法,例如使用 Azure Synapse 提供的适当库。在我看来,spark.read.jdbc应该只运行 SELECT 查询
标签: azure pyspark databricks azure-databricks azure-synapse