Läsa data från BigQuery Nested & Repeated

BigQuery stödjer ett par smarta sätt att hantera data, Nested- & Repeated-fält, som skiljer från hur vi hanterar data från andra databaser. Qlik Sense kan hantera fälten och i detta inlägg ska vi gå igenom vad som skiljer dem åt och hur man läser data från dem.


Nested fields

Nested fields är grupperade kolumner i tabeller som möjliggör att hålla samman information på ett smidigt sätt. Nested fields innehåller endast en rad per rad i den överliggande tabelle och man kan smidigt komma åt fälten genom att använda <huvudkolumn>.<underkolumn>.


I följande utdrag av en tabelldefinition från Google Analytics kan man se hur tabellen GoogleAnalytics innehåller nested fields som t.ex. trafficSource. TrafficSource är av typen RECORD och följs av ett antal fält med trafficSource som första del av namnet, t.ex. trafficSource.referralPath och trafficSource.campaign. Fältet trafficSource innehåller i sin tur ett nested field - adwordsClickInfo - som i sin tur innehåller ett annat nested field - targetingCriteria.


Från ett Qlik Sense-persepktiv behöver vi hantera hur vi läser ut data från till exempel trafficSource. Om vi bara väljer tabellen kommer Sense inte förstå att trafficSource innehåller en underliggande struktur och bryta ut denna.


SELECT * FROM `newyorktaxi-289818.NewYorkTaxi.GoogleAnalytics` LIMIT 1000;

Vi måste manuellt ange att vi vill läsa ut de underliggande nivåerna i SQL-satsen. Observera hur vi anger trafficSource.* för att hämta alla underliggande fält.


SELECT visitorId, visitNumber, trafficSource.* FROM `newyorktaxi-289818.NewYorkTaxi.GoogleAnalytics` LIMIT 1000;


För varje nivå måste vi ange de underliggande nivåerna vi vill ta med oss. I exemplet ovan ser vi att trafficSource.adwordsClickInfo inte kommit med.


Repeated fields

Repeated fields är mycket mer än fältgrupper i tabeller - repeated fields är tabeller i tabeller. I vårt exempel med Google Analytics finns det till exempel som customDimensions där det kan finnas flera customerDimensions-rader per rad i huvudtabellen. Istället för att lagra dessa rader i en länkad tabell läggs informationen in som repeated fields.


Även Repeated fields kräver att vi hanterar utläsningen på ett speciellt sätt. Läser vi ut customDimensions utan hantering visar Sense endast datat som en struktur.


SELECT visitorId, visitNumber, customDimensions FROM `newyorktaxi-289818.NewYorkTaxi.GoogleAnalytics` LIMIT 1000;

Lösningen i Sense blir att lyfta ut utläsningen av de repeated fields till egna tabeller och nyckla dessa.


Visits:

SELECT visitId, visitNumber, trafficSource.* FROM `newyorktaxi-289818.NewYorkTaxi.GoogleAnalytics` LIMIT 1000;


CustomDims:

SELECT visitId, customDimensions.* FROM NewYorkTaxi.GoogleAnalytics, UNNEST(customDimensions) as customDimensions LIMIT 1000;



Skriven av: Morgan Kejerhag

Morgan Kejerhag har arbetat med Qlik-plattformen sedan 2005 och är en av Sveriges mest erfarna konsulter. Under åren har Morgan arbetat med flertalet multinationella bolag där han lett arbetet i att bygga upp stora Qlik-miljöer såväl som små kunder. LinkedIn Kontaktuppgifter

Vill du har mer information?

Kontakta oss via informationen på vår kontakt-sida.

DrakeStone AB
Teknikringen 10

583 30 Linköping

Org: 556986-6956

© 2020 Drake Analytics