【发布时间】:2021-02-09 22:09:34
【问题描述】:
我有一个相当复杂的查询,它基于内部连接创建一个表。查询由 Python 代码和 SQLAlchemy 创建。当查询运行时,目标表中的结果缺少右连接表中的数据。
要找出我为什么要这样做:
- 在 BQ 控制台的“查询历史”中找到了具体查询。
- 使用与查询关联的作业,我已获取作业 JSON 文件。
- 我已将查询文本中的所有参数 (@) 替换为其文字值。
- 将生成的 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