【问题标题】:disable column store in azure sql dataware house在 azure sql 数据仓库中禁用列存储
【发布时间】:2018-10-30 03:27:08
【问题描述】:

我正在将 Azure Databricks 中的数据帧写入 sql 数据仓库,使用

res.write \
    .format("jdbc") \
    .option("url", url) \
    .option("dbtable", table) \
    .option("user", user) \
    .option("password", password) \
    .save()

我收到一个错误Column 'username' has a data type that cannot participate in a columnstore index.

如何才能完全消除列存储,或更改列的数据类型以适应列存储?

我有一些列将被视为整数,而一些列将被视为 varchar。

【问题讨论】:

    标签: azure databricks columnstore sql-data-warehouse


    【解决方案1】:

    将此选项子句添加到您的 write 语句中。它取代了 CREATE TABLE (AS) 语句的 with() 子句:

    .option ("tableOptions","heap,distribution=MY_DISTRIBUTION")
    

    参考在这里:

    https://docs.databricks.com/spark/latest/data-sources/azure/sql-data-warehouse.html

    根据以下指导为 MY_DISTRIBUTION 选择一个值:

    https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-distribute

    【讨论】:

    • 您好,非常感谢!我尝试添加 `.option ("tableOptions","heap,distribution=HASH(rowno)") ` 其中 rowno 是 int。我仍然得到与之前引用同一列相同的错误。这个语法不正确吗?
    • 你先放下桌子了吗?我认为您正在插入先前创建的表中。您还应该能够使用 .mode (SaveMode.Overwrite) 子句。
    • 我实际上尝试用不同的名称创建一个新表。目前没有在数据库中创建具有该名称的表。代码现在看起来像这样 res.write \ .format("jdbc") \ .option("url", url) \ .option("dbtable", table1) \ .option ("tableOptions","heap , distribution=HASH(rowno)") \ .option("user", user) \ .option("password", password) \ .save()
    • 您使用 .format("jdbc") 有什么原因吗?它应该是 .format("com.databricks.spark.sqldw")。仔细查看我在上面发布的参考链接中的示例:)
    • 嘿,是的,这就是问题所在。当我更改它时,它现在正在加载数据。非常感谢你!代码最后是 res.write \ .format("com.databricks.spark.sqldw") \ .option("forwardSparkAzureStorageCredentials", "True") \ .option("url", url) \ .option("dbtable" , table1) \ .option("tableOptions","heap,distribution=HASH(rownum)") \ .option("tempdir", tempDir) \ .save()
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 2016-06-30
    • 1970-01-01
    • 2016-10-26
    • 2016-03-15
    • 2017-12-16
    • 2018-12-05
    • 2016-02-06
    相关资源
    最近更新 更多