Allmän vägledning för frågekörning i Query Service
Det här dokumentet innehåller viktig information som du bör känna till när du skriver frågor i Adobe Experience Platform Query Service.
Mer information om SQL-syntaxen som används i Query Service finns i SQL-syntaxdokumentationen.
Frågekörningsmodeller
Adobe Experience Platform Query Service har två modeller för frågekörning: interaktiv och icke-interaktiv. Interaktiv körning används för frågeutveckling och rapportgenerering i verktyg för affärsinformation, medan icke-interaktiv används för större jobb och operativa frågor som en del av ett arbetsflöde för databearbetning.
Interaktiv frågekörning
Du kan köra frågor interaktivt genom att skicka dem via Query Service-gränssnittet eller via en ansluten klient. När Query Service körs via en ansluten klient körs en aktiv session mellan klienten och Query Service tills den skickade frågan returneras eller timeout inträffar.
Interaktiv frågekörning har följande begränsningar:
LIMIT 0
i frågan om du vill åsidosätta den maximala radbegränsningen. Frågetidsgränsen på 10 minuter gäller fortfarande.Som standard returneras resultatet av interaktiva frågor till klienten och är inte beständiga. För att resultaten ska kunna behållas som en datamängd i Experience Platform måste frågan använda syntaxen CREATE TABLE AS SELECT
.
Ej interaktiv frågekörning
Frågor som skickats via API:t Query Service körs icke-interaktivt. Icke-interaktiv körning innebär att Query Service tar emot API-anropet och kör frågan i den ordning den tas emot. Icke-interaktiva frågor leder alltid till att en ny datamängd skapas i Experience Platform för att ta emot resultaten, eller att nya rader infogas i en befintlig datamängd.
Åtkomst till ett specifikt fält i ett objekt
Om du vill komma åt ett fält i ett objekt i frågan kan du antingen använda punktnotation (.
) eller hakparentesnotation ([]
). Följande SQL-sats använder punktnotation för att gå igenom objektet endUserIds
ned till objektet mcid
.
SELECT endUserIds._experience.mcid
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
{ANALYTICS_TABLE_NAME}
Följande SQL-sats använder hakparenteser för att gå igenom objektet endUserIds
ned till objektet mcid
.
SELECT endUserIds['_experience']['mcid']
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
{ANALYTICS_TABLE_NAME}
Båda exempelfrågorna ovan returnerar ett förenklat objekt i stället för ett enda värde:
endUserIds._experience.mcid
--------------------------------------------------------
(48168239533518554367684086979667672499,"(ECID)",true)
(1 row)
Det returnerade endUserIds._experience.mcid
-objektet innehåller motsvarande värden för följande parametrar:
id
namespace
primary
När kolumnen bara deklareras ned till objektet returneras hela objektet som en sträng. Om du bara vill visa ID:t använder du:
SELECT endUserIds._experience.mcid.id
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
endUserIds._experience.mcid.id
----------------------------------------
48168239533518554367684086979667672499
(1 row)
Citat
Enkla citattecken, dubbla citattecken och bakåtcitattecken kan användas på olika sätt i frågor om frågetjänsten.
Enkla citattecken
Det enkla citattecknet ('
) används för att skapa textsträngar. Den kan till exempel användas i programsatsen SELECT
för att returnera ett statiskt textvärde i resultatet och i WHERE
-satsen för att utvärdera innehållet i en kolumn.
Följande fråga deklarerar ett statiskt textvärde ('datasetA'
) för en kolumn:
SELECT
'datasetA',
timestamp,
web.webPageDetails.name
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Följande fråga använder en sträng med bara citattecken ('homepage'
) i WHERE-satsen för att returnera händelser för en viss sida.
SELECT
timestamp,
endUserIds._experience.mcid.id
FROM {ANALYTICS_TABLE_NAME}
WHERE web.webPageDetails.name = 'homepage'
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Citattecken
Dubbelcitattecknet ("
) används för att deklarera en identifierare med blanksteg.
I följande fråga används dubbla citattecken för att returnera värden från angivna kolumner när en kolumn innehåller ett blanksteg i sin identifierare:
SELECT
no_space_column,
"space column"
FROM
( SELECT
'column1' as no_space_column,
'column2' as "space column"
)
Bakåtcitat
Det bakre citattecknet `
används för att kringgå reserverade kolumnnamn endast när punktnotationssyntax används. Eftersom order
till exempel är ett reserverat ord i SQL måste du använda citattecken för att komma åt fältet commerce.order
:
SELECT
commerce.`order`
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Bakåtcitattecken används också för att komma åt ett fält som börjar med en siffra. Om du till exempel vill komma åt fältet 30_day_value
måste du använda notation för bakåtcitat.
SELECT
commerce.`30_day_value`
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Bakåtcitattecken behövs inte om du använder hakparenteser.
SELECT
commerce['order']
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
Visa tabellinformation
När du har anslutit till frågetjänsten kan du se alla tillgängliga tabeller på plattformen med hjälp av kommandona \d
eller SHOW TABLES
.
Standardtabellvy
Kommandot \d
visar standardvyn PostgreSQL för att lista tabeller. Ett exempel på det här kommandots utdata visas nedan:
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | luma_midvalues | table | postgres
public | luma_postvalues | table | postgres
(2 rows)
Detaljerad tabellvy
Kommandot SHOW TABLES
är ett anpassat kommando som ger mer detaljerad information om tabellerna. Ett exempel på det här kommandots utdata visas nedan:
name | dataSetId | dataSet | description | resolved
-----------------+--------------------------+----------------+-------------+----------
luma_midvalues | 5bac030c29bb8d12fa992e58 | Luma midValues | | false
luma_postvalues | 5c86b896b3c162151785b43c | Luma midValues | | false
(2 rows)
Schemainformation
Om du vill visa mer detaljerad information om scheman i tabellen kan du använda kommandot \d {TABLE_NAME}
, där {TABLE_NAME}
är namnet på tabellen vars schemainformation du vill visa.
I följande exempel visas schemainformationen för tabellen luma_midvalues
, som skulle visas med \d luma_midvalues
:
Table "public.luma_midvalues"
Column | Type | Collation | Nullable | Default
-------------------+-----------------------------+-----------+----------+---------
timestamp | timestamp | | |
_id | text | | |
productlistitems | anyarray | | |
commerce | luma_midvalues_commerce | | |
receivedtimestamp | timestamp | | |
enduserids | luma_midvalues_enduserids | | |
datasource | datasource | | |
web | luma_midvalues_web | | |
placecontext | luma_midvalues_placecontext | | |
identitymap | anymap | | |
marketing | marketing | | |
environment | luma_midvalues_environment | | |
_experience | luma_midvalues__experience | | |
device | device | | |
search | search | | |
Du kan dessutom få mer information om en viss kolumn genom att lägga till namnet på kolumnen till tabellnamnet. Detta skulle skrivas i formatet \d {TABLE_NAME}_{COLUMN}
.
I följande exempel visas ytterligare information för kolumnen web
och anropas med följande kommando: \d luma_midvalues_web
:
Composite type "public.luma_midvalues_web"
Column | Type | Collation | Nullable | Default
----------------+-----------------------------------+-----------+----------+---------
webpagedetails | luma_midvalues_web_webpagedetails | | |
webreferrer | web_webreferrer | | |
Sammanfoga datauppsättningar
Du kan sammanfoga flera datauppsättningar för att inkludera data från andra datauppsättningar i din fråga.
I följande exempel kopplas följande två datauppsättningar (your_analytics_table
och custom_operating_system_lookup
) och en SELECT
-programsats skapas för de 50 främsta operativsystemen utifrån antalet sidvisningar.
Fråga
SELECT
b.operatingsystem AS OperatingSystem,
SUM(a.web.webPageDetails.pageviews.value) AS PageViews
FROM your_analytics_table a
JOIN custom_operating_system_lookup b
ON a._experience.analytics.environment.operatingsystemID = b.operatingsystemid
WHERE TIMESTAMP >= TO_TIMESTAMP('2018-01-01') AND TIMESTAMP <= TO_TIMESTAMP('2018-12-31')
GROUP BY OperatingSystem
ORDER BY PageViews DESC
LIMIT 50;
Resultat
Deduplicering
Frågetjänsten stöder datadeduplicering eller borttagning av dubblettrader från data. Mer information om borttagning av dubbletter finns i guiden för borttagning av dubbletter för frågetjänsten.
Tidszonsberäkningar i frågetjänsten
Frågetjänsten standardiserar beständiga data i Adobe Experience Platform med UTC-tidsstämpelformatet. Mer information om hur du översätter dina krav på tidszon till och från en UTC-tidsstämpel finns i avsnittet Vanliga frågor och svar om hur du ändrar tidszonen till och från en UTC-tidsstämpel.
Nästa steg
Genom att läsa det här dokumentet har du lagts till en del viktiga överväganden när du skriver frågor med Query Service. Mer information om hur du använder SQL-syntaxen för att skriva egna frågor finns i SQL-syntaxdokumentationen.
Fler exempel på frågor som kan användas i Query Service finns i följande dokumentation: