【问题标题】:Azure Synapse Studio: Different number of columns in CREATE TABLE or CREATE EXTERNAL TABLE and SELECT queryAzure Synapse Studio:CREATE TABLE 或 CREATE EXTERNAL TABLE 和 SELECT 查询中的列数不同
【发布时间】:2023-01-04 03:21:26
【问题描述】:

我需要针对 Azure Synapse Studio 中的大型数据集运行查询。查询结果太大而无法在 Web 界面中返回,因此我一直在研究如何将结果通过管道传输到外部文件。

我正在关注this guide,但遇到了一个问题,我将其分解为以下简单查询:

CREATE EXTERNAL TABLE TestCsv
(
    [CustomerId] VARCHAR (10)
)
WITH (
    LOCATION = 'test.csv',
    DATA_SOURCE = MyDataSource,
    FILE_FORMAT = QuotedCSVWithHeaderFormat
) AS
SELECT TOP 10 CustomerId
FROM dbo.Customers

此处,MyDataSource 是使用 God SAS 令牌连接到 Azure 存储 blob 容器的数据源。

上面的查询产生以下错误:

CREATE TABLE 或 CREATE EXTERNAL TABLE 和 SELECT 查询中的列数不同。

我只是不明白这有什么问题。 FWIW 从 Customers 视图返回的 CustomerID 列也是一个变量(10).

有什么建议吗?

【问题讨论】:

    标签: tsql azure-synapse


    【解决方案1】:

    外部表与普通表类似,只是它不保存数据。所以在这种情况下,表 TestCsv 从文件“test.csv”中读取所有数据。 我认为您将以下查询混淆为 CTE,在 TSQL 世界中这应该可以正常工作。

    WITH (
        LOCATION = 'test.csv',
        DATA_SOURCE = MyDataSource,
        FILE_FORMAT = QuotedCSVWithHeaderFormat
    ) AS
    SELECT TOP 10 CustomerId
    FROM dbo.Customers
    

    如果打算从外部表“TestCsv”中的“dbo.Customers”加载记录,只需更新带下划线的 csv 文件。

    您可以使用 Synapse 管道将视图记录到文件中。 HTH

    【讨论】:

      【解决方案2】:

      我有同样的问题。当您在新的 EXTERNAL TABLE 中指定列模式时,它似乎会给出错误“列数不同”。它可以从您的 SELECT 语句中自动检测列架构类型,例如:

      CREATE EXTERNAL TABLE TestCsv
      WITH (
          LOCATION = 'test.csv',
          DATA_SOURCE = MyDataSource,
          FILE_FORMAT = QuotedCSVWithHeaderFormat
      ) AS
      SELECT TOP 10 CustomerId
      FROM dbo.Customers
      

      另见:https://www.c-sharpcorner.com/article/cetas-creating-external-table-as-select-in-azure-synapse-analytics/

      【讨论】:

        猜你喜欢
        • 2020-12-24
        • 2020-02-08
        • 1970-01-01
        • 2013-06-29
        • 2020-09-16
        • 2020-03-21
        • 2013-04-13
        • 2019-07-23
        • 2014-12-02
        相关资源
        最近更新 更多