【问题标题】:Azure SQL Data Warehouse: max size of varchar typeAzure SQL 数据仓库:varchar 类型的最大大小
【发布时间】:2019-12-16 21:37:40
【问题描述】:

我是 Azure 新手,我在 Azure SQL 数据仓库的表中有这个字段:

[AnnotationText] varchar(MAX) NULL,

根据我从https://docs.microsoft.com/en-us/sql/t-sql/data-types/char-and-varchar-transact-sql?view=sql-server-2017 读到的内容:

  • varchar [ ( n | max ) ] 可变大小的字符串数据。使用 n 以字节为单位定义字符串大小,可以是 1 到 8,000 之间的值,或者使用 max 指示列约束大小,最大存储空间为 2^31-1 字节 (2 GB)。

但我看到的是 8000 的大小和这种类型的错误消息:

Too long string in column [-1]: Actual len = [11054]. MaxLEN=[8000]

我尝试对大小进行硬编码,但任何大于 8000 的数字都无法按照文档中的说明工作。

我还发现一些文档说应该在创建表时使用 HEAP 或 CLUSTERED INDEX 类型,但它也没有帮助

知道出了什么问题吗?

【问题讨论】:

  • 您能否显示出错的查询?
  • 我通过数据工厂使用了 PolyBase,因此显示查询并不容易。我使用 Copy Data 活动从 SQL 数据库复制到 SQL 数据仓库。
  • 不支持(最大)数据类型的 ADF 文档。 docs.microsoft.com/en-us/azure/data-factory/…
  • @RonDunn 请发表您的评论作为答案。谢谢!
  • 准确地说,Polybase 不支持最大类型。再次感谢@RonDunn,请将其作为答案发布

标签: azure sql-data-warehouse azure-sql-data-warehouse


【解决方案1】:

ADF documents Polybase 不支持 (max) 个数据类型。

一种常用的技术是在 ADF 中拆分文件,使用 Polybase 批量加载 LOB 数据,然后另一种技术是稍后添加 LOB 数据。另一种更快的技术是使用 ADF 拆分 ,然后在摄取点使用分层在外部表上的视图重新组合它。

更好的方法可能是质疑数据仓库中为什么需要 LOB 数据。是否有可以使用的替代方法,具体取决于 LOB 的类型?例如,如果 LOB 表示一个文档,是否可以通过 DW 表中的链接将其外部化到 Blob 存储?

【讨论】:

    【解决方案2】:

    我正在使用 Databricks 通过 Polybase 将数据插入 Azure DW(突触)。我的数据集中有一个 nvarchar(500) 列,但它未能遇到同样的问题。我发现在我的情况下,断点在 255 到 300 个字符之间。我最终只是将该列子串化为 250 个字符,因为内容对于报告目的并不重要。

    【讨论】:

    • 这类似于建议,因此您可以将其作为评论插入。请阅读这个社区的规则。
    • 对不起,评论需要50点声望,我没有,但想分享一下我的经验。如果不符合规定,我可以删除我的答案。
    • 并回答我自己的答案,这应该是评论:)。与 Synapse 的 Databricks 连接的字符串默认最大长度为 256。您可以使用“maxStrLength”选项覆盖它。
    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2018-06-19
    • 2011-08-31
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多