【问题标题】:Parametrized BigQuery query produces no results from a joined table参数化 BigQuery 查询不会从联接表中产生任何结果
【发布时间】:2021-02-09 22:09:34
【问题描述】:

我有一个相当复杂的查询,它基于内部连接创建一个表。查询由 Python 代码和 SQLAlchemy 创建。当查询运行时,目标表中的结果缺少右连接表中的数据。

要找出我为什么要这样做:

  1. 在 BQ 控制台的“查询历史”中找到了具体查询。
  2. 使用与查询关联的作业,我已获取作业 JSON 文件。
  3. 我已将查询文本中的所有参数 (@) 替换为其文字值。
  4. 将生成的 SQL 文本加载到 BQ 编辑器并执行查询。

令我惊讶的是,连接表中的数据现在出现在结果中。

这源于 BQ 中的错误的可能性非常小。我认为不同之处在于我在重新创建查询时替换参数值的方式。

具体的查询参数是“STRING”或“INT64”。以下是查询 JSON 文件中的示例:

          {
            "name": "PARAM_802c1f6dd32747238ccdf80b305a4fd1",
            "parameterType": {"type": "INT64"},
            "parameterValue": {"value": "0"}
          },
          {
            "name": "PARAM_f7ad61d9a6414d0ea8560e097950ecbc",
            "parameterType": {"type": "STRING"},
            "parameterValue": {"value": "`column`"}
          },

这些是我替换“@param*”时遵循的规则:

  • 如果参数是 INT64,我会使用 JSON “原样”中的值(不带引号)
  • 如果一个参数是字符串,我检查它是否被反引号包围。如果被包围,我会“按原样”使用它,如果没有,我会在值中添加周围的单引号。

很高兴听取专家的意见,我的方法可能有什么问题,或者任何其他可以帮助我解决(或调试)问题的方法。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    似乎我的问题是我尝试使用列名作为值,但不支持。以下是文档的摘录:

    参数不能用于替代标识符、列名、表名或查询的其他部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-25
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      相关资源
      最近更新 更多