考虑以下用例:我想使用Microsoft的Apache Spark SQL Connector将Spark Dataframe 写入存储在Azure SQL Server数据库中的dwh。根据使用情况,可以使用“覆盖”或“追加”。
对于DWH,建议使用聚集列存储索引。由于我还希望强制执行主键约束,聚集列存储索引上的非聚集索引可能会产生最佳性能。
如何使用此索引设计创建或追加到带有pyspark的表?
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("overwrite OR append") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", sqldbuser) \
.option("password", sqldbpwd)
字符串
答案不必是纯粹基于pyspark的(例如可以使用SQLAlchemy)。它应该只是工作强劲。
1条答案
按热度按时间c3frrgcw1#
最好的方法是将 Dataframe 从pyspark插入到Azure SQL Server上的staging表中(覆盖),然后使用存储过程将数据插入到columnstore索引dwh表中。
在存储过程中,使用类似这样的内容:
字符串
此外,尝试一次插入多行,以便columnstore索引可以有效地压缩它(超过1,048,576行)。
关于nonclusterd索引-如果您需要它作为主键,以防止重复,那么您别无选择,只能在加载期间将其激活。
如果没有,请尝试在加载前禁用非聚集索引(在存储过程中),并在加载后启用它们。请注意,这并不总是给予你最好的性能,你必须测试它与您的工作负载。
请参阅本文件:https://learn.microsoft.com/en-us/sql/relational-databases/indexes/columnstore-indexes-data-loading-guidance?view=sql-server-ver16