J'ai un schéma qui contient plusieurs champs répétés qui ne sont pas imbriqués. P>
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 ..." P>
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. P>
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 P>
Je veux interroger: Sélectionnez (*) à partir de l'onglet p>
3 Réponses :
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)
)
)
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 / ... .
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 p>
(aplatissé (aplatissé (tableau, A1), A2)) P> blockQuote>
Maintenant que BigQuery a déménagé à SQL standard, en utilisant ALLACHEN code> ne fonctionne pas. Cependant, Google a documenté comment migrer . Cette solution a fonctionné pour moi, bien qu'il y ait plusieurs autres moyens de le faire:
SELECT
flattened_field_1,
flattened_field_2
FROM my_dataset.my_table
LEFT JOIN UNNEST(repeated_field_1) AS flattened_field_1
LEFT JOIN UNNEST(repeated_field_2) AS flattened_field_2
# ...etc