在 Azure Databricks 上使用本地范围 table 优化 blob 存储 Deltalake
Optimize blob storage Deltalake using local scope table on Azure Databricks
如何优化 Azure Databricks 上的 Azure blob 存储增量 table,同时不将 table 放入全局范围?
可以通过(参见 docs):
对 Azure blob 存储上的增量 table 进行优化和 z 排序
spark.sql('DROP TABLE IF EXISTS T')
spark.sql("CREATE TABLE T USING DELTA LOCATION
'wasbs://fs@accname.blob.core.windows.net/path/to/df'"
spark.sql('OPTIMIZE T ZORDER BY (colname)')
spark.sql('DROP TABLE IF EXISTS T')
但是,table T
具有全局范围,因此如果其他用户已经用名称 T
标记了 table,则此命令将失败。
可能的解决方案如下,但这是最简单的方法吗(为什么需要 `
而不是 '
)?
spark.sql("OPTIMIZE delta.`wasbs://fs@accname.blob.core.windows.net/path/to/df`
ZORDER BY (colname)")
两个想法:
- 您可以并且应该将 table 范围限定为数据库。上面的示例将 'default' 作为数据库名称。以
MY_DB
为例:
spark.sql("CREATE TABLE MY_DB.T USING DELTA LOCATION
'wasbs://fs@accname.blob.core.windows.net/path/to/df'"
- 是的,你的建议也是正确的。后面的抽搐是一个奇怪的 spark-ism,用于在 select 子句中指定数据集的位置 属性。
如何优化 Azure Databricks 上的 Azure blob 存储增量 table,同时不将 table 放入全局范围? 可以通过(参见 docs):
对 Azure blob 存储上的增量 table 进行优化和 z 排序spark.sql('DROP TABLE IF EXISTS T')
spark.sql("CREATE TABLE T USING DELTA LOCATION
'wasbs://fs@accname.blob.core.windows.net/path/to/df'"
spark.sql('OPTIMIZE T ZORDER BY (colname)')
spark.sql('DROP TABLE IF EXISTS T')
但是,table T
具有全局范围,因此如果其他用户已经用名称 T
标记了 table,则此命令将失败。
可能的解决方案如下,但这是最简单的方法吗(为什么需要 `
而不是 '
)?
spark.sql("OPTIMIZE delta.`wasbs://fs@accname.blob.core.windows.net/path/to/df`
ZORDER BY (colname)")
两个想法:
- 您可以并且应该将 table 范围限定为数据库。上面的示例将 'default' 作为数据库名称。以
MY_DB
为例:
spark.sql("CREATE TABLE MY_DB.T USING DELTA LOCATION
'wasbs://fs@accname.blob.core.windows.net/path/to/df'"
- 是的,你的建议也是正确的。后面的抽搐是一个奇怪的 spark-ism,用于在 select 子句中指定数据集的位置 属性。