比较bigQuery中两种类型的数据

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

我们有一个非常大的数据集。我需要获取从源属性映射到 json 中规范化属性的所有值。标准化和源之间的关系是,如果标准化值中的source_key与source_attributes键相同,那么我们应该返回它们所有的名称。

我的输入有点像这样:

  "source_attributes": {
    "desirability": {
      "values": [
        {
          "value": "000000002"
        }
      ]
    },
    "isbn-13": {
      "values": [
        {
          "value": "9781934568392"
        }
      ]
    }
  },
  "normalized": {
    "isbn-13": [
      {
        "properties": {
          "attributeId": "85984",
          "multiselect": "N",
          "domain": "pcs",
          "display_attribute_name": "ISBN-13",
          "taxonomy_version": "urn:taxonomy:pcs2.0",
          "attributeName": "ISBN-13"
        },
        "values": [
          {
            "display_attr_name": "ISBN-13",
            "locale": "en_US",
            "value": "9781934568392",
            "isPrimary": "true",
            "source_value": "9781934568392",
            "source_key": "isbn-13"
          }
        ]
      }
    ]
  }
}

我想要的输出是这样的:

enter image description here

我编写的查询从具有源属性并标准化的数据中获取所有值,但是由于两个元素在结构上不同,我如何比较这些值?

SELECT json_extract(element_json, '$.source_attributes') as source_att, json_extract(element_json, '$.normalized') as normal
FROM `data`
where json_value(element_json,'$.source')='TEST'
limit 1000;
google-bigquery comparison bigdata
1个回答
0
投票

以下是一个 SQL 片段,说明了一种可能的技术:

CREATE TEMP FUNCTION keys(val JSON)
RETURNS ARRAY<STRING>
LANGUAGE js AS r"""
return Object.keys(val)
""";


WITH data AS (
  SELECT JSON '{"source": {"a": 1,"b": 2,"c": 3},"target": {"a": 2,"d": 4}}'  as json_data
),
source_keys as (
  SELECT keys(json_data.source) AS s_keys FROM data
),
target_keys as (
  SELECT keys(json_data.target) as t_keys FROM data
)
SELECT s_key_t, CASE WHEN s_key_t IN UNNEST((SELECT t_keys from target_keys)) THEN s_key_t ELSE null END as t_key_t from UNNEST((SELECT s_keys from source_keys)) as s_key_t

在这个故事中,我们假设一个 JSON 对象本身包含两个子对象,称为

source
target
。 我们的目标是找出源中的哪些字段也存在于目标中,我们关心它们的名称/身份而不是它们的值。

我们使用 UDF 从源和目标返回一个字段名称数组,然后通过(逻辑上)询问源字段名称数组中的每个键来比较它们,目标字段名称中是否存在相同的名称数组。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.