Azure Synapse Pipeline Lookup / Copy 活动,如何使用变量代替表名进行查询

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

在 Azure Synapse Pipeline Lookup 或 Copy 活动的查询设置中,我正在测试使用变量作为表名,以便可以在另一个 ForEach 循环内使用此活动。但我不断收到此错误:

错误 [42000] [Microsoft][BigQuery] (70) 无效查询:查询参数不能用于代替 [4:1] 处的表名称

以下是设置的几个关键点:

  • 管道变量“v_tbl_name”来保存表名称。对于此测试,我将此变量的默认值硬编码为真实的表名称。
  • 源数据集是 Google BigQuery,表名称为 Prarmeter 'p_table_name'
  • 此设置适用于“表”方法,但我使用查询方法,因为源有 STRUCT 列,表方法会给出混乱的结果。例如,没有查询的列
    sku STRUCT<id STRING OPTIONS(description=""), description STRING OPTIONS(description="")> OPTIONS(description=""),
    ,数据将类似于
    {"v":{"f":[{"v":"123-test-321"},{"v":"Log Volume"}]}}
  • 查询语句为
    SELECT * FROM @variables('v_tbl_name')
    ,用几个列名代替*,如
    sku.id AS sku_id, sku.description AS sku_description,
  • 我还尝试使用附加变量 v_ds_name 并使用 Concat 函数与其数据集形成表名,但得到了相同的错误:
    SELECT * FROM @concat(variables('v_ds_name'),'.',variables('v_tbl_name'))' tbl
  • 请查看屏幕截图以获取更多信息:

另一个带有 dataset.tablename 的屏幕截图,但出现了相同的错误

使用“Table”方法的屏幕截图

我从这篇文章中查找了类似的问题,但我仍然无法弄清楚:ADF 使用变量创建查找活动查询

期待您的来信,提前谢谢您。

sql copy azure-data-factory lookup azure-synapse
1个回答
0
投票

您需要在查询选项中使用字符串插值。如果要在查询字符串中写入ADF动态内容,则需要在

@{}
内写入动态内容表达式(变量或函数)。

这是一个示例演示:

像这样写下您的查询。

select * from @{variables('table_name')}

enter image description here

结果:

enter image description here

concat()
也需要位于
@{}
内部,如下所示。

select * from @{concat(variables('v_ds_name'),'.',variables('v_tbl_name'))}
© www.soinside.com 2019 - 2024. All rights reserved.