以编程方式定义 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 列的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Reactstrap 自定义列

QTableView 列的相对大小提示

设置 UIBarButtonItem 的背景图像以编程方式更改其大小

自动布局 - 以编程方式定义异常约束

如何以编程方式快速添加自定义 UIButton

如何以编程方式为其父视图添加视图大小?