将“null”值传递到 Azure Synapse 中的文件名参数中会根据获取的表 schema.table 生成文件名

问题描述 投票:0回答:1

我在 Azure Synapse 中创建了一个管道,包含两个步骤:

  1. 读取 .csv 文件的查找活动。
  2. Foreach 活动,迭代 .csv 文件中的每个值/行并从数据库中检索数据。

在 CSV 文件中,第一行作为分隔符,具有以下结构: dbName、schema、src_table、dest_table

  1. dbName 是我们从中检索数据的数据库的名称。
  2. schema 是表的架构。
  3. src_table 是我们要从中检索数据的表的名称。
  4. dest_table 是 Blob 存储(容器)中我们将存储数据的文件的名称。

运行 Lookup 活动(仅读取文件内容)时,我得到以下输出(我们看到 dest_table 中有一个空值):

然后将该值作为参数发送到所使用的接收器数据集 (ADLS Parquet)。见下图:

此集成数据集(Sink Dataset)配置如下:

所以,条件如下:

  1. 我们检索 dbName、schema、src_table(我们有数据)。我们尝试检索 dest_table 的值,但它是空的,导致值“null”,例如。
  2. 我们从给定的数据库/架构/表中获取数据,并将这些数据保存在 Azure Blob 存储中的文件中。
  3. 对于放置数据的结构,我们希望文件名与 CSV 文件中指定的“schema.table”相同。
  4. 我们将 null 发送到我们的集成数据集(参数 fileName)。
  5. 创建的文件名仍然是“schema.table”。

当我们不提供文件名值时,它默认为“schema.table”,这是怎么回事?请参见下图查看数据传输和 parquet 文件创建的最终结果。

azure parquet azure-synapse
1个回答
0
投票

根据您提供的详细信息,当数据集中的文件名值为空时,它会使用

SchemaName.TableName
创建文件。

据我所知,当您将任何数据库中的数据存储到 Blob 存储并且不为目标文件设置任何名称时,ADF 的默认 beg=haviour 会自动创建名称为 Source SchemaName.TableName 的文件

解决方法可以像其他活动一样使用。要检查

dest_table
的值:

  • 要检查

    dest_table
    的值是否为空,如果不为空,请使用
    @equals(item().dest_table,null)
    此表达式。 enter image description here

  • 如果为空,那么您可以在复制活动中使用动态表达式设置目标文件的名称,如下所示

    @concat(item().src_table,'_desttableNULL')
    它将设置值,例如demo_desttableNULL.

  • 如果不为空,则复制活动可以从 CSV 文件本身获取目标表值。

© www.soinside.com 2019 - 2024. All rights reserved.