11
votes

Querifier plusieurs champs répétés à BigQuery

J'ai un schéma qui contient plusieurs champs répétés qui ne sont pas imbriqués.

J'essaie d'interroger le produit croisé, mais je reçois une erreur: "Impossible d'interroger le produit croisé des champs répétés ..."

Si j'interque seulement 2 champs répétés, je peux en aplatir l'un d'eux. Pourtant, je suis intéressé à demander plus que 2 champs répétés, et je ne peux pas comprendre à quel point la syntaxe aplatit la syntaxe.

Par exemple, disons que la structure de la table est la suivante: A1, record (répété): a1.b1, entier A2, record (répété): A2.B1, Entier A3, record (répété): A3.b1, entier

Je veux interroger: Sélectionnez (*) à partir de l'onglet


0 commentaires

3 Réponses :


14
votes

Vous pouvez utiliser un sous-sélection imbriqué à l'intérieur du Flatten code>. Cela nécessite une paren supplémentaire autour de la déclaration SELECT. (La syntaxe est une sorte de laid, malheureusement). E.G.

SELECT
  ...
FROM (
    FLATTEN((
      SELECT
        ...
      FROM (
          FLATTEN((
            SELECT
              ...
            FROM
              table),
            f1)
          )
        ),
      f2)
    )
  )


2 commentaires

Fonctionne comme un charme! Je souhaite spécifier les champs à sélectionner une seule fois, dans la sélection la plus interne et écrivez SELECT * sur toutes les autres sélectionnées imbriquées. Mais alors je ne peux pas spécifier une ordonnance par clause, puisque l'ordre n'impose que le champ apparaît dans les champs Sélectionner.


Bon travail sur la réponse acceptée. Cependant, devrait probablement être mis à jour: Cloud.google .com / BigQuery / Docs / Référence / Standard-SQL / ... .



7
votes

Si vous n'avez pas besoin de faire quelque chose de spécifique à l'intérieur de la sélection interne, vous pouvez simplement utiliser

(aplatissé (aplatissé (tableau, A1), A2))


0 commentaires