【问题标题】:Retrieving a flat result - BigQuery Standard SQL检索平面结果 - BigQuery 标准 SQL
【发布时间】:2019-01-31 16:24:33
【问题描述】:

我在 bigQuery 中有以下标准 SQL 查询:

SELECT
    Chr,
    start_position,
    reference_bases,
    call.name,
    call.genotype,
    alternate_bases.alt,
    alternate_bases_CSQ_VT.*
FROM
    `mutable`,
    UNNEST(call) AS call,
    UNNEST(call.genotype) AS genotype,
    UNNEST(alternate_bases) AS alternate_bases,
    UNNEST(alternate_bases.CSQ_VT) AS alternate_bases_CSQ_VT
WHERE
    call.name = "sample name"
    AND CLIN_SIG = "pathogenic"
    AND genotype > 0
LIMIT
  100

返回的表是平面的,除了生成的基因型字段(返回的每行有两条记录)。我想返回一个平面表,其中每行的两个基因型值都转换为两个新列(等位基因 1 和等位基因 2),但我正在努力使用正确的方法。任何指针都会很棒

【问题讨论】:

  • 我不了解您的数据结构或查询。您的查询有一个名为 name 的列,不在示例结果中。您有一个 where 子句可以过滤掉基因型 0,但它在结果中。

标签: sql google-bigquery flatten


【解决方案1】:

您的问题有点难以理解。通常,最好的方法是使用UNNEST() 的子查询。我不太清楚你的数据模型(查询和样本数据不一致)。但是,像这样:

SELECT . . . ,
       (SELECT MAX(call.name)
        FROM UNNEST(call) genotype
        WHERE call.genotype = 0
       ) as genotype_0,
       (SELECT MAX(call.name)
        FROM UNNEST(call) genotype
        WHERE call.genotype = 1
       ) as genotype_1
FROM `mutable`,
     UNNEST(alternate_bases) AS alternate_bases,
     UNNEST(alternate_bases.CSQ_VT) AS alternate_bases_CSQ_VT
WHERE call.name = 'sample name'
      CLIN_SIG = 'pathogenic'
LIMIT 100

【讨论】:

    【解决方案2】:

    我很欣赏这个答案,我也会尝试这个 - 很抱歉这个问题不太清楚。我确实想出了一个解决方案,虽然我不知道它是否有效。

    SELECT
      Chr,
      start_position,
      reference_bases,
      call.name,
      call.genotype[OFFSET(0)] as all1,
      call.genotype[OFFSET(1)] as all2,
      alternate_bases.alt,
      alternate_bases_CSQ_VT.*
    FROM
      `mutable`,
      UNNEST(call) AS call,
      UNNEST(call.genotype) AS genotype,
      UNNEST(alternate_bases) AS alternate_bases,
      UNNEST(alternate_bases.CSQ_VT) AS alternate_bases_CSQ_VT
    WHERE
      call.name = "sample name"
      AND CLIN_SIG = "pathogenic"
      AND genotype > 0
    LIMIT
      100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多