以编程方式定义 SQL 列的大小
Posted
技术标签:
【中文标题】以编程方式定义 SQL 列的大小【英文标题】:Programmaticaly define size of SQL columns 【发布时间】:2019-05-29 10:25:24 【问题描述】:我正在 Azure Databricks 中从事 ETL 工作。当我写入 Azure DB 时,nvarchar 列被创建为 nvarchar(max)。
我正在执行以下操作以将数据帧写入 SQL:
df.write \
.format("jdbc") \
.option("url", _get_dw_jdbc_url()) \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", table_name) \
.option("tempDir", _get_temp_connection_string()) \
.option("maxStrLength", 255)\
.mode(mode) \
.save()
我希望 maxStrLength 能神奇地解决问题,但事实并非如此。
这个有什么解决办法吗?我可以在写入数据库之前定义 SQL 表的架构吗?
【问题讨论】:
我想做的事情类似于你在 Scala 中通过使用带有 ColumnMetadata 的 bulkCopyToSqlDB 可以做的事情。 docs.microsoft.com/en-us/azure/sql-database/… 【参考方案1】:在进行上述写入之前,请使用 pyodbc 创建表。这意味着您的模式必须附加(您没有在 sn-p 中显示它)。
在读取完整的源数据之前无法确定长度,因此 Spark 在读取完成之前(通常/理想情况下)开始写入时无法即时计算这些长度。
【讨论】:
以上是关于以编程方式定义 SQL 列的大小的主要内容,如果未能解决你的问题,请参考以下文章