SQL-syntax i Query Service
Du kan använda ANSI SQL som standard för SELECT-satser och andra begränsade kommandon i Adobe Experience Platform Query Service. Det här dokumentet innehåller den SQL-syntax som stöds av Query Service.
SELECT-frågor select-queries
Följande syntax definierar en SELECT-fråga som stöds av Query Service:
[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT [( expression [, ...] ) ] ]
    [ * | expression [ [ AS ] output_name ] [, ...] ]
    [ FROM from_item [, ...] ]
    [ SNAPSHOT { SINCE start_snapshot_id | AS OF end_snapshot_id | BETWEEN start_snapshot_id AND end_snapshot_id } ]
    [ WHERE condition ]
    [ GROUP BY grouping_element [, ...] ]
    [ HAVING condition [, ...] ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start ]
            I flikavsnittet nedan finns tillgängliga alternativ för nyckelorden FROM, GROUP och WITH…
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
| code language-sql | 
|---|
                      
                     | 
                  
Följande underavsnitt innehåller information om ytterligare satser som du kan använda i dina frågor, förutsatt att de följer det format som beskrivs ovan.
SNAPSHOT-sats
Den här satsen kan användas för att stegvis läsa data i en tabell baserat på ID:n för ögonblicksbilder. Ett ID för en ögonblicksbild är en kontrollpunktsmarkör som representeras av ett Long-typnummer som används på en datarintabell varje gång data skrivs till den. Satsen SNAPSHOT kopplar sig till registerrelationen som den används bredvid.
    [ SNAPSHOT { SINCE start_snapshot_id | AS OF end_snapshot_id | BETWEEN start_snapshot_id AND end_snapshot_id } ]
            Exempel
SELECT * FROM table_to_be_queried SNAPSHOT SINCE start_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT AS OF end_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT BETWEEN start_snapshot_id AND end_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT BETWEEN 'HEAD' AND start_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT BETWEEN end_snapshot_id AND 'TAIL';
SELECT * FROM (SELECT id FROM table_to_be_queried SNAPSHOT BETWEEN start_snapshot_id AND end_snapshot_id) C;
(SELECT * FROM table_to_be_queried SNAPSHOT SINCE start_snapshot_id) a
  INNER JOIN
(SELECT * from table_to_be_joined SNAPSHOT AS OF your_chosen_snapshot_id) b
  ON a.id = b.id;
            HEAD eller TAIL i en SNAPSHOT-sats måste du omsluta dem med enkla citattecken (till exempel"HEAD","TAIL"). Om du använder dem utan citattecken uppstår ett syntaxfel.Tabellen nedan förklarar innebörden av varje syntaxalternativ i SNAPSHOT-satsen.
SINCE start_snapshot_idAS OF end_snapshot_idBETWEEN start_snapshot_id AND end_snapshot_idstart_snapshot_id och inkluderar end_snapshot_id.BETWEEN HEAD AND start_snapshot_idstart_snapshot_id.BETWEEN end_snapshot_id AND TAILend_snapshot_id till slutet av datauppsättningen (exklusive ögonblicksbilds-ID). Det innebär att om end_snapshot_id är den sista ögonblicksbilden i datauppsättningen returneras nollrader eftersom det inte finns några ögonblicksbilder utöver den senaste ögonblicksbilden.SINCE start_snapshot_id INNER JOIN table_to_be_joined AS OF your_chosen_snapshot_id ON table_to_be_queried.id = table_to_be_joined.idtable_to_be_queried och kopplar det med data från table_to_be_joined som det var på your_chosen_snapshot_id. Kopplingen baseras på matchande ID:n från ID-kolumnerna i de två tabellerna som kopplas.En SNAPSHOT-sats fungerar med en tabell eller ett tabellalias men inte ovanpå en underfråga eller vy. En SNAPSHOT-sats fungerar var som helst där en SELECT-fråga i en tabell kan tillämpas.
Du kan också använda HEAD och TAIL som speciella förskjutningsvärden för ögonblicksbildssatser. Om du använder HEAD refereras en förskjutning före den första ögonblicksbilden, medan TAIL refererar till en förskjutning efter den sista ögonblicksbilden.
resolve_fallback_snapshot_on_failure) har angetts:- Om den valfria reservbeteendeflaggan är inställd väljer frågetjänsten den tidigaste tillgängliga ögonblicksbilden, anger den som startögonblicksbild och returnerar data mellan den tidigaste tillgängliga ögonblicksbilden och den angivna slutögonblicksbilden. Dessa data är inklusiv av den tidigaste tillgängliga ögonblicksbilden.
 
WHERE-sats
Som standard är matchningar som skapats av en WHERE-sats i en SELECT -fråga skiftlägeskänsliga. Om du vill att matchningar ska vara skiftlägesokänsliga kan du använda nyckelordet ILIKE i stället för LIKE.
    [ WHERE condition { LIKE | ILIKE | NOT LIKE | NOT ILIKE } pattern ]
            Logiken i LIKE- och ILIKE-klausulerna förklaras i följande tabell:
WHERE condition LIKE pattern~~WHERE condition NOT LIKE pattern!~~WHERE condition ILIKE pattern~~*WHERE condition NOT ILIKE pattern!~~*Exempel
SELECT * FROM Customers
WHERE CustomerName ILIKE 'a%';
            Den här frågan returnerar kunder med namn som börjar på A eller a.
GÅ MED
En SELECT-fråga som använder kopplingar har följande syntax:
SELECT statement
FROM statement
[JOIN | INNER JOIN | LEFT JOIN | LEFT OUTER JOIN | RIGHT JOIN | RIGHT OUTER JOIN | FULL JOIN | FULL OUTER JOIN]
ON join condition
            UNION, INTERSECT, and EXCEPT
Satserna UNION, INTERSECT och EXCEPT används för att kombinera eller exkludera liknande rader från två eller flera tabeller:
SELECT statement 1
[UNION | UNION ALL | UNION DISTINCT | INTERSECT | EXCEPT | MINUS]
SELECT statement 2
            SKAPA TABELL SOM MARKERAD create-table-as-select
Använd kommandot CREATE TABLE AS SELECT (CTAS) för att materialisera resultatet av en SELECT-fråga till en ny tabell. Detta är användbart när du skapar omformade datauppsättningar, utför aggregeringar eller förhandsgranskar funktionsinriktade data innan du använder dem i en modell.
Om du är redo att utbilda en modell med omformade funktioner kan du läsa dokumentationen för modeller som innehåller riktlinjer om hur du använder CREATE MODEL med TRANSFORM -satsen.
Du kan också inkludera en TRANSFORM-sats för att tillämpa en eller flera funktionstekniska funktioner direkt i CTAS-satsen. Använd TRANSFORM för att kontrollera resultatet av transformeringslogiken före modellutbildning.
Syntaxen gäller både permanenta och tillfälliga tabeller.
CREATE TABLE table_name
  [WITH (schema='target_schema_title', rowvalidation='false', label='PROFILE')]
  [TRANSFORM (transformFunctionExpression1, transformFunctionExpression2, ...)]
AS (select_query)
            CREATE TEMP TABLE table_name
  [WITH (schema='target_schema_title', rowvalidation='false', label='PROFILE')]
  [TRANSFORM (transformFunctionExpression1, transformFunctionExpression2, ...)]
AS (select_query)
            schemarowvalidationlabelPROFILE för att etikettera datauppsättningen som aktiverad för profilinmatning.transformTRANSFORM-satsdokumentationen .select_querySELECT-standardsats som definierar datauppsättningen. Mer information finns i avsnittet SELECT-frågor .SELECT måste innehålla ett alias för sammanställningsfunktioner som COUNT, SUM eller MIN. Du kan ange frågan SELECT med eller utan parenteser. Detta gäller oavsett om TRANSFORM-satsen används eller inte.Exempel
Ett grundläggande exempel som använder en TRANSFORM-sats för att förhandsgranska några av de avancerade funktionerna:
CREATE TABLE ctas_transform_table_vp14
TRANSFORM(
  String_Indexer(additional_comments) si_add_comments,
  one_hot_encoder(si_add_comments) as ohe_add_comments,
  tokenizer(comments) as token_comments
)
AS SELECT * FROM movie_review_e2e_DND;
            Ett mer avancerat exempel med flera omformningssteg:
CREATE TABLE ctas_transform_table
TRANSFORM(
  String_Indexer(additional_comments) si_add_comments,
  one_hot_encoder(si_add_comments) as ohe_add_comments,
  tokenizer(comments) as token_comments,
  stop_words_remover(token_comments, array('and','very','much')) stp_token,
  ngram(stp_token, 3) ngram_token,
  tf_idf(ngram_token, 20) ngram_idf,
  count_vectorizer(stp_token, 13) cnt_vec_comments,
  tf_idf(token_comments, 10, 1) as cmts_idf
)
AS SELECT * FROM movie_review;
            Exempel på en temporär tabell:
CREATE TEMP TABLE ctas_transform_table
TRANSFORM(
  String_Indexer(additional_comments) si_add_comments,
  one_hot_encoder(si_add_comments) as ohe_add_comments,
  tokenizer(comments) as token_comments,
  stop_words_remover(token_comments, array('and','very','much')) stp_token,
  ngram(stp_token, 3) ngram_token,
  tf_idf(ngram_token, 20) ngram_idf,
  count_vectorizer(stp_token, 13) cnt_vec_comments,
  tf_idf(token_comments, 10, 1) as cmts_idf
)
AS SELECT * FROM movie_review;
            Begränsningar och beteenden limitations-and-behavior
Tänk på följande begränsningar när du använder satsen TRANSFORM med CREATE TABLE eller CREATE TEMP TABLE:
- Om en omformningsfunktion genererar en vektorutdata, konverteras den automatiskt till en array.
 - Därför kan tabeller som skapats med 
TRANSFORMinte användas direkt iCREATE MODEL-satser. Du måste definiera om omformningslogiken när modellen skapas för att generera lämpliga funktionsvektorer. - Omformningar används bara när du skapar tabeller. Nya data som infogats i tabellen med 
INSERT INTOomformas inte automatiskt. Om du vill använda omformningar på nya data måste du återskapa tabellen medCREATE TABLE AS SELECTochTRANSFORM-satsen. - Den här metoden är avsedd för förhandsgranskning och validering av omformningar vid en tidpunkt, inte för att bygga återanvändbara omformningspipelines.
 
TRANSFORM, klausul transform
Använd TRANSFORM-satsen för att tillämpa en eller flera funktionstekniska funktioner på en datauppsättning före modellutbildning eller tabellskapande. Med den här satsen kan du förhandsgranska, validera eller definiera den exakta formen på indatafunktionerna.
Satsen TRANSFORM kan användas i följande programsatser:
CREATE MODELCREATE TABLECREATE TEMP TABLE
Mer information om hur du använder CREATE MODEL finns i Models-dokumentationen, inklusive hur du definierar omformningar, anger modellalternativ och konfigurerar utbildningsdata.
Mer information om hur du använder CREATE TABLE finns i avsnittet SKAPA TABELL SOM VAL.
CREATE MODEL, exempel
CREATE MODEL review_model
TRANSFORM(
  String_Indexer(additional_comments) si_add_comments,
  one_hot_encoder(si_add_comments) AS ohe_add_comments,
  tokenizer(comments) AS token_comments,
  stop_words_remover(token_comments, array('and','very','much')) AS stp_token,
  ngram(stp_token, 3) AS ngram_token,
  tf_idf(ngram_token, 20) AS ngram_idf,
  count_vectorizer(stp_token, 13) AS cnt_vec_comments,
  tf_idf(token_comments, 10, 1) AS cmts_idf,
  vector_assembler(array(cmts_idf, viewsgot, ohe_add_comments, ngram_idf, cnt_vec_comments)) AS features
)
OPTIONS(MODEL_TYPE='logistic_reg', LABEL='reviews')
AS SELECT * FROM movie_review_e2e_DND;
            Begränsningar limitations
Följande begränsningar gäller när du använder TRANSFORM med CREATE TABLE. I avsnittet CREATE TABLE AS SELECT om begränsningar och beteenden finns en detaljerad förklaring om hur omformade data lagras, hur vektorutdata hanteras och varför resultaten inte kan återanvändas direkt i arbetsflöden för modellutbildning.
- Vektorutdata konverteras automatiskt till arrayer, som inte kan användas direkt i 
CREATE MODEL. - Transformeringslogiken bevaras inte som metadata och kan inte återanvändas över grupper.
 
INFOGA I
Kommandot INSERT INTO definieras så här:
INSERT INTO är det enda datamanipuleringskommando som stöds, update- och delete-åtgärder är inte tillgängliga. Om du vill spegla ändringar i dina data infogar du nya poster som representerar det önskade läget.INSERT INTO table_name select_query
            table_nameselect_queryExempel
INSERT INTO Customers SELECT SupplierName, City, Country FROM OnlineCustomers;
INSERT INTO Customers AS (SELECT * from OnlineCustomers SNAPSHOT AS OF 345)
            SELECT inom parentes (). Schemat för resultatet av programsatsen SELECT måste dessutom överensstämma med schemat för tabellen som definierats i programsatsen INSERT INTO. Du kan tillhandahålla en SNAPSHOT-sats för att läsa inkrementella deltas i måltabellen.De flesta fält i ett riktigt XDM-schema hittas inte på rotnivå och SQL tillåter inte användning av punktnotation. För att få ett realistiskt resultat med kapslade fält måste du mappa varje fält i sökvägen INSERT INTO.
Använd följande syntax för att INSERT INTO kapslade sökvägar:
INSERT INTO [dataset]
SELECT struct([source field1] as [target field in schema],
[source field2] as [target field in schema],
[source field3] as [target field in schema]) [tenant name]
FROM [dataset]
            Exempel
INSERT INTO Customers SELECT struct(SupplierName as Supplier, City as SupplierCity, Country as SupplierCountry) _Adobe FROM OnlineCustomers;
            DROP TABLE
Kommandot DROP TABLE släpper en befintlig tabell och tar bort katalogen som är associerad med tabellen från filsystemet om den inte är en extern tabell. Om tabellen inte finns inträffar ett undantag.
DROP TABLE [IF EXISTS] [db_name.]table_name
            IF EXISTSSKAPA DATABAS
Kommandot CREATE DATABASE skapar en Azure Data Lake Storage-databas (ADLS).
CREATE DATABASE [IF NOT EXISTS] db_name
            DROP DATABASE
Kommandot DROP DATABASE tar bort databasen från en instans.
DROP DATABASE [IF EXISTS] db_name
            IF EXISTSDROP SCHEMA
Kommandot DROP SCHEMA släpper ett befintligt schema.
DROP SCHEMA [IF EXISTS] db_name.schema_name [ RESTRICT | CASCADE]
            IF EXISTSRESTRICTCASCADESKAPA VY create-view
En SQL-vy är en virtuell tabell som baseras på resultatet av en SQL-sats. Skapa en vy med programsatsen CREATE VIEW och ge den ett namn. Du kan sedan använda det namnet för att referera tillbaka till resultatet av frågan. Det gör det enklare att återanvända komplexa frågor.
Följande syntax definierar en CREATE VIEW-fråga för en datamängd. Den här datauppsättningen kan vara en ADLS- eller accelererad butiksdatauppsättning.
CREATE VIEW view_name AS select_query
            view_nameselect_queryExempel
CREATE VIEW V1 AS SELECT color, type FROM Inventory
CREATE OR REPLACE VIEW V1 AS SELECT model, version FROM Inventory
            Följande syntax definierar en CREATE VIEW-fråga som skapar en vy i kontexten för en databas och ett schema.
Exempel
CREATE VIEW db_name.schema_name.view_name AS select_query
CREATE OR REPLACE VIEW db_name.schema_name.view_name AS select_query
            db_nameschema_nameview_nameselect_queryExempel
CREATE VIEW <dbV1 AS SELECT color, type FROM Inventory;
CREATE OR REPLACE VIEW V1 AS SELECT model, version FROM Inventory;
            VISA VYER
Följande fråga visar en lista med vyer.
SHOW VIEWS;
             Db Name  | Schema Name | Name  | Id       |  Dataset Dependencies | Views Dependencies | TYPE
|----------------------------------------------------------------------------------------------
 qsaccel  | profile_agg | view1 | view_id1 | dwh_dataset1          |                    | DWH
          |             | view2 | view_id2 | adls_dataset          | adls_views         | ADLS
(2 rows)
            DROP VIEW
Följande syntax definierar en DROP VIEW-fråga:
DROP VIEW [IF EXISTS] view_name
            IF EXISTSview_nameExempel
DROP VIEW v1
DROP VIEW IF EXISTS v1
            Anonymt block anonymous-block
Ett anonymt block består av två avsnitt: körbara avsnitt och avsnitt för undantagshantering. I ett anonymt block är det körbara avsnittet obligatoriskt. Avsnittet om undantagshantering är dock valfritt.
I följande exempel visas hur du skapar ett block med en eller flera programsatser som ska köras tillsammans:
$$BEGIN
  statementList
[EXCEPTION exceptionHandler]
$$END
exceptionHandler:
      WHEN OTHER
      THEN statementList
statementList:
    : (statement (';')) +
            Nedan visas ett exempel med anonym blockering.
$$BEGIN
   SET @v_snapshot_from = select parent_id  from (select history_meta('email_tracking_experience_event_dataset') ) tab where is_current;
   SET @v_snapshot_to = select snapshot_id from (select history_meta('email_tracking_experience_event_dataset') ) tab where is_current;
   SET @v_log_id = select now();
   CREATE TABLE tracking_email_id_incrementally
     AS SELECT _id AS id FROM email_tracking_experience_event_dataset SNAPSHOT BETWEEN @v_snapshot_from AND @v_snapshot_to;
EXCEPTION
  WHEN OTHER THEN
    DROP TABLE IF EXISTS tracking_email_id_incrementally;
    SELECT 'ERROR';
$$END;
            Villkorliga satser i ett anonymt block conditional-anonymous-block-statements
Kontrollstrukturen IF-THEN-ELSE möjliggör villkorlig körning av en lista med satser när ett villkor utvärderas som TRUE. Denna kontrollstruktur är endast tillämplig inom ett anonymt block. Om den här strukturen används som ett fristående kommando resulterar det i ett syntaxfel ("Ogiltigt kommando utanför det anonyma blocket").
Kodfragmentet nedan visar rätt format för villkorssatsen IF-THEN-ELSE i ett anonymt block.
IF booleanExpression THEN
   List of statements;
ELSEIF booleanExpression THEN
   List of statements;
ELSEIF booleanExpression THEN
   List of statements;
ELSE
   List of statements;
END IF
            Exempel
Exemplet nedan kör SELECT 200;.
$$BEGIN
    SET @V = SELECT 2;
    SELECT @V;
    IF @V = 1 THEN
       SELECT 100;
    ELSEIF @V = 2 THEN
       SELECT 200;
    ELSEIF @V = 3 THEN
       SELECT 300;
    ELSE
       SELECT 'DEFAULT';
    END IF;
 END$$;
            Den här strukturen kan användas med raise_error(); för att returnera ett anpassat felmeddelande. Kodblocket som visas nedan avslutar det anonyma blocket med"anpassat felmeddelande".
Exempel
$$BEGIN
    SET @V = SELECT 5;
    SELECT @V;
    IF @V = 1 THEN
       SELECT 100;
    ELSEIF @V = 2 THEN
       SELECT 200;
    ELSEIF @V = 3 THEN
       SELECT 300;
    ELSE
       SELECT raise_error('custom error message');
    END IF;
 END$$;
            Kapslade IF-programsatser
Kapslade IF-satser stöds i anonyma block.
Exempel
$$BEGIN
    SET @V = SELECT 1;
    IF @V = 1 THEN
       SELECT 100;
       IF @V > 0 THEN
         SELECT 1000;
       END IF;
    END IF;
 END$$;
            Undantagsblock
Undantagsblock stöds i anonyma block.
Exempel
$$BEGIN
    SET @V = SELECT 2;
    IF @V = 1 THEN
       SELECT 100;
    ELSEIF @V = 2 THEN
       SELECT raise_error(concat('custom-error for v= ', '@V' ));
    ELSEIF @V = 3 THEN
       SELECT 300;
    ELSE
       SELECT 'DEFAULT';
    END IF;
EXCEPTION WHEN OTHER THEN
  SELECT 'THERE WAS AN ERROR';
 END$$;
            Auto till JSON auto-to-json
Frågetjänsten stöder en valfri inställning på sessionsnivå för att returnera komplexa fält på den översta nivån från interaktiva SELECT-frågor som JSON-strängar. Inställningen auto_to_json tillåter att data från komplexa fält returneras som JSON och sedan tolkas till JSON-objekt med hjälp av standardbibliotek.
ANGE att funktionsflaggan auto_to_json ska vara true innan SELECT-frågan som innehåller komplexa fält körs.
set auto_to_json=true;
            Innan du anger flaggan auto_to_json
        I följande tabell visas ett exempel på frågeresultat innan inställningen auto_to_json används. Samma SELECT-fråga (se nedan) som avser en tabell med komplexa fält användes i båda scenarierna.
SELECT * FROM TABLE_WITH_COMPLEX_FIELDS LIMIT 2;
            Resultatet är följande:
                _id                |                                _experience                                 | application  |                   commerce                   | dataSource |                               device                               |                       endUserIDs                       |                                                                                                environment                                                                                                |                     identityMap                     |                              placeContext                               |   receivedTimestamp   |       timestamp       | userActivityRegion |                                         web                                          | _adcstageforpqs
|-----------------------------------+----------------------------------------------------------------------------+--------------+----------------------------------------------+------------+--------------------------------------------------------------------+--------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------+-------------------------------------------------------------------------+-----------------------+-----------------------+--------------------+--------------------------------------------------------------------------------------+-----------------
 31892EE15DE00000-401D52664FF48A52 | ("("("(1,1)","(1,1)")","(-209479095,4085488201,-2105158467,2189808829)")") | (background) | (NULL,"(USD,NULL)",NULL,NULL,NULL,NULL,NULL) | (475341)   | (32,768,1024,205202,https://ns.adobe.com/xdm/external/deviceatlas) | ("("(31892EE080007B35-E6CE00000000000,"(AAID)",t)")")  | ("(en-US,f,f,t,1.6,"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7",490,1125)",xo.net,64.3.235.13)     | [AAID -> "{(31892EE080007B35-E6CE00000000000,t)}"]  | ("("(34.01,-84.0)",lawrenceville,US,524,30043,ga)",600)                 | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | (UT1)              | ("(f,Search Results,"(1.0)")","(http://www.google.com/search?ie=UTF-8&q=,internal)") |
 31892EE15DE00000-401B92664FF48AE8 | ("("("(1,1)","(1,1)")","(-209479095,4085488201,-2105158467,2189808829)")") | (background) | (NULL,"(USD,NULL)",NULL,NULL,NULL,NULL,NULL) | (475341)   | (32,768,1024,205202,https://ns.adobe.com/xdm/external/deviceatlas) | ("("(31892EE100007BF3-215FE00000000001,"(AAID)",t)")") | ("(en-US,f,f,t,1.5,"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7",768,556)",ntt.net,219.165.108.145) | [AAID -> "{(31892EE100007BF3-215FE00000000001,t)}"] | ("("(34.989999999999995,138.42)",shizuoka,JP,392005,420-0812,22)",-240) | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | (UT1)              | ("(f,Home - JJEsquire,"(1.0)")","(NULL,typed_bookmarked)")                           |
(2 rows)
            Efter inställning av flaggan auto_to_json
        I följande tabell visas skillnaden i resultat som auto_to_json-inställningen har på den resulterande datauppsättningen. Samma SELECT-fråga användes i båda scenarierna.
                _id                |   receivedTimestamp   |       timestamp       |                                                                                                                   _experience                                                                                                                   |           application            |             commerce             |    dataSource    |                                                                  device                                                                   |                                                   endUserIDs                                                   |                                                                                                                                                                                           environment                                                                                                                                                                                            |                             identityMap                              |                                                                                            placeContext                                                                                            |      userActivityRegion      |                                                                                     web                                                                                      | _adcstageforpqs
|-----------------------------------+-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------+----------------------------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------
 31892EE15DE00000-401D52664FF48A52 | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | {"analytics":{"customDimensions":{"eVars":{"eVar1":"1","eVar2":"1"},"props":{"prop1":"1","prop2":"1"}},"environment":{"browserID":-209479095,"browserIDStr":"4085488201","operatingSystemID":-2105158467,"operatingSystemIDStr":"2189808829"}}} | {"userPerspective":"background"} | {"order":{"currencyCode":"USD"}} | {"_id":"475341"} | {"colorDepth":32,"screenHeight":768,"screenWidth":1024,"typeID":"205202","typeIDService":"https://ns.adobe.com/xdm/external/deviceatlas"} | {"_experience":{"aaid":{"id":"31892EE080007B35-E6CE00000000000","namespace":{"code":"AAID"},"primary":true}}}  | {"browserDetails":{"acceptLanguage":"en-US","cookiesEnabled":false,"javaEnabled":false,"javaScriptEnabled":true,"javaScriptVersion":"1.6","userAgent":"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7","viewportHeight":490,"viewportWidth":1125},"domain":"xo.net","ipV4":"64.3.235.13"}     | {"AAID":[{"id":"31892EE080007B35-E6CE00000000000","primary":true}]}  | {"geo":{"_schema":{"latitude":34.01,"longitude":-84.0},"city":"lawrenceville","countryCode":"US","dmaID":524,"postalCode":"30043","stateProvince":"ga"},"localTimezoneOffset":600}                 | {"dataCenterLocation":"UT1"} | {"webPageDetails":{"isHomePage":false,"name":"Search Results","pageViews":{"value":1.0}},"webReferrer":{"URL":"http://www.google.com/search?ie=UTF-8&q=","type":"internal"}} |
 31892EE15DE00000-401B92664FF48AE8 | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | {"analytics":{"customDimensions":{"eVars":{"eVar1":"1","eVar2":"1"},"props":{"prop1":"1","prop2":"1"}},"environment":{"browserID":-209479095,"browserIDStr":"4085488201","operatingSystemID":-2105158467,"operatingSystemIDStr":"2189808829"}}} | {"userPerspective":"background"} | {"order":{"currencyCode":"USD"}} | {"_id":"475341"} | {"colorDepth":32,"screenHeight":768,"screenWidth":1024,"typeID":"205202","typeIDService":"https://ns.adobe.com/xdm/external/deviceatlas"} | {"_experience":{"aaid":{"id":"31892EE100007BF3-215FE00000000001","namespace":{"code":"AAID"},"primary":true}}} | {"browserDetails":{"acceptLanguage":"en-US","cookiesEnabled":false,"javaEnabled":false,"javaScriptEnabled":true,"javaScriptVersion":"1.5","userAgent":"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7","viewportHeight":768,"viewportWidth":556},"domain":"ntt.net","ipV4":"219.165.108.145"} | {"AAID":[{"id":"31892EE100007BF3-215FE00000000001","primary":true}]} | {"geo":{"_schema":{"latitude":34.989999999999995,"longitude":138.42},"city":"shizuoka","countryCode":"JP","dmaID":392005,"postalCode":"420-0812","stateProvince":"22"},"localTimezoneOffset":-240} | {"dataCenterLocation":"UT1"} | {"webPageDetails":{"isHomePage":false,"name":"Home - JJEsquire","pageViews":{"value":1.0}},"webReferrer":{"type":"typed_bookmarked"}}                                        |
(2 rows)
            Lös reservögonblicksbild vid fel resolve-fallback-snapshot-on-failure
Alternativet resolve_fallback_snapshot_on_failure används för att lösa problemet med ett ögonblicksbild-ID som har gått ut.
Ange alternativet resolve_fallback_snapshot_on_failure till true om du vill åsidosätta en ögonblicksbild med ett tidigare ID för ögonblicksbild.
SET resolve_fallback_snapshot_on_failure=true;
            Följande kodrad åsidosätter @from_snapshot_id med den tidigaste tillgängliga snapshot_id från metadata.
$$ BEGIN
    SET resolve_fallback_snapshot_on_failure=true;
    SET @from_snapshot_id = SELECT coalesce(last_snapshot_id, 'HEAD') FROM checkpoint_log a JOIN
                            (SELECT MAX(process_timestamp)process_timestamp FROM checkpoint_log
                                WHERE process_name = 'DIM_TABLE_ABC' AND process_status = 'SUCCESSFUL' )b
                                on a.process_timestamp=b.process_timestamp;
    SET @to_snapshot_id = SELECT snapshot_id FROM (SELECT history_meta('DIM_TABLE_ABC')) WHERE  is_current = true;
    SET @last_updated_timestamp= SELECT CURRENT_TIMESTAMP;
    INSERT INTO DIM_TABLE_ABC_Incremental
     SELECT  *  FROM DIM_TABLE_ABC SNAPSHOT BETWEEN @from_snapshot_id AND @to_snapshot_id WHERE NOT EXISTS (SELECT _id FROM DIM_TABLE_ABC_Incremental a WHERE _id=a._id);
Insert Into
   checkpoint_log
   SELECT
       'DIM_TABLE_ABC' process_name,
       'SUCCESSFUL' process_status,
      cast( @to_snapshot_id AS string) last_snapshot_id,
      cast( @last_updated_timestamp AS TIMESTAMP) process_timestamp;
EXCEPTION
  WHEN OTHER THEN
    SELECT 'ERROR';
END
$$;
            Dataresursorganisation
Det är viktigt att logiskt organisera era dataresurser inom Adobe Experience Platform dataresa när de växer. Med frågetjänsten utökas SQL-konstruktioner som gör att du logiskt kan gruppera dataresurser i en sandlåda. Med den här organisationsmetoden kan du dela datatillgångar mellan scheman utan att behöva flytta dem fysiskt.
Följande SQL-konstruktioner som använder standard-SQL-syntax stöds så att du kan organisera dina data logiskt.
CREATE DATABASE dg1;
CREATE SCHEMA dg1.schema1;
CREATE table t1 ...;
CREATE view v1 ...;
ALTER TABLE t1 ADD PRIMARY KEY (c1) NOT ENFORCED;
ALTER TABLE t2 ADD FOREIGN KEY (c1) REFERENCES t1(c1) NOT ENFORCED;
            Mer information om bästa praxis för frågetjänst finns i guiden logisk organisation av datatillgångar .
Tabellen finns
SQL-kommandot table_exists används för att bekräfta om det finns en tabell i systemet. Kommandot returnerar ett booleskt värde: true om tabellen inte finns och false om tabellen inte finns.
Genom att validera om en tabell finns innan programsatserna körs, förenklar funktionen table_exists processen att skriva ett anonymt block så att det omfattar både CREATE- och INSERT INTO-användningsfall.
Följande syntax definierar kommandot table_exists:
$$
BEGIN
#Set mytableexist to true if the table already exists.
SET @mytableexist = SELECT table_exists('target_table_name');
#Create the table if it does not already exist (this is a one time operation).
CREATE TABLE IF NOT EXISTS target_table_name AS
  SELECT *
  FROM   profile_dim_date limit 10;
#Insert data only if the table already exists. Check if @mytableexist = 'true'
 INSERT INTO target_table_name           (
                     select *
                     from   profile_dim_date
                     WHERE  @mytableexist = 'true' limit 20
              ) ;
EXCEPTION
WHEN other THEN SELECT 'ERROR';
END $$;
            Textbunden inline
Funktionen inline separerar elementen i en array med strukturer och genererar värdena till en tabell. Den kan bara placeras i listan SELECT eller LATERAL VIEW.
inline-funktionen kan inte placeras i en urvalslista där det finns andra generatorfunktioner.
Som standard får kolumnerna som skapas namnen "col1", "col2" och så vidare. Om uttrycket är NULL skapas inga rader.
RENAME.Exempel
> SELECT inline(array(struct(1, 'a'), struct(2, 'b'))), 'Spark SQL';
            Exemplet returnerar följande:
1  a Spark SQL
2  b Spark SQL
            I det andra exemplet demonstreras konceptet och tillämpningen av funktionen inline ytterligare. Datamodellen för exemplet illustreras i bilden nedan.
          
          
Exempel
select inline(productListItems) from source_dataset limit 10;
            Värdena från source_dataset används för att fylla i måltabellen.
ANGE
Kommandot SET ställer in en egenskap och returnerar antingen värdet för en befintlig egenskap eller visar alla befintliga egenskaper. Om ett värde anges för en befintlig egenskapsnyckel åsidosätts det gamla värdet.
SET property_key = property_value
            property_keyproperty_valueOm du vill returnera värdet för en inställning använder du SET [property key] utan en property_value.
PostgreSQL-kommandon
Underavsnitten nedan omfattar de PostgreSQL-kommandon som stöds av frågetjänsten.
ANALYSERA TABELL analyze-table
Kommandot ANALYZE TABLE utför en distributionsanalys och statistiska beräkningar för den namngivna tabellen eller tabellerna. Användningen av ANALYZE TABLE varierar beroende på om datauppsättningarna lagras på det accelererade arkivet eller datasjön. Mer information om hur de används finns i respektive avsnitt.
DATORSTATISTIK på den accelererade butiken compute-statistics-accelerated-store
Kommandot ANALYZE TABLE beräknar statistik för en tabell på det accelererade arkivet. Statistiken beräknas på utförda CTAS- eller ITAS-frågor för en given tabell på den accelererade butiken.
Exempel
ANALYZE TABLE <original_table_name>
            Nedan följer en lista över statistiska beräkningar som är tillgängliga efter användning av kommandot ANALYZE TABLE :-
fielddata-typecountdistinct-countmissingmaxminmeanstdevCOMPUTE STATISTICS on the data Lake compute-statistics-data-lake
Du kan nu beräkna kolumnnivåstatistik för Azure Data Lake Storage (ADLS) datauppsättningar med SQL-kommandot COMPUTE STATISTICS. Beräkna kolumnstatistik för antingen hela datauppsättningen, en deluppsättning av en datauppsättning, alla kolumner eller en delmängd av kolumner.
COMPUTE STATISTICS utökar kommandot ANALYZE TABLE. Kommandona COMPUTE STATISTICS, FILTERCONTEXT och FOR COLUMNS stöds dock inte i tabeller med accelererade arkiv. Dessa tillägg för kommandot ANALYZE TABLE stöds för närvarande bara för ADLS-tabeller.
Exempel
ANALYZE TABLE tableName FILTERCONTEXT (timestamp >= to_timestamp('2023-04-01 00:00:00') and timestamp <= to_timestamp('2023-04-05 00:00:00')) COMPUTE STATISTICS  FOR COLUMNS (commerce, id, timestamp);
            Kommandot FILTER CONTEXT beräknar statistik på en delmängd av datauppsättningen baserat på det angivna filtervillkoret. Kommandot FOR COLUMNS har specifika kolumner som mål för analysen.
Statistics ID och den genererade statistiken är bara giltiga för varje session och kan inte nås mellan olika PSQL-sessioner.Begränsningar:
- Statistisk generering stöds inte för datatyperna array eller map
 - Beräknad statistik är inte beständig mellan sessioner.
 
skip_stats_for_complex_datatypes
SET skip_stats_for_complex_datatypes = falseKonsolutdata visas enligt nedan.
|     Statistics ID      |
| ---------------------- |
| adc_geometric_stats_1  |
(1 row)
            Du kan sedan fråga den beräknade statistiken direkt genom att referera till Statistics ID. Använd Statistics ID eller aliasnamnet så som visas i exempelprogramsatsen nedan för att visa utdata i sin helhet. Mer information om den här funktionen finns i dokumentationen om aliasnamn.
-- This statement gets the statistics generated for `alias adc_geometric_stats_1`.
SELECT * FROM adc_geometric_stats_1;
            Använd kommandot SHOW STATISTICS om du vill visa metadata för all temporär statistik som genereras i sessionen. Det här kommandot kan hjälpa dig att förfina omfattningen av din statistiska analys.
SHOW STATISTICS;
            Ett exempel på VISA STATISTIK visas nedan.
      statsId         |   tableName   | columnSet |         filterContext       |      timestamp
|----------------------+---------------+-----------+-----------------------------+--------------------
adc_geometric_stats_1 | adc_geometric |   (age)   |                             | 25/06/2023 09:22:26
demo_table_stats_1    |  demo_table   |    (*)    |       ((age > 25))          | 25/06/2023 12:50:26
age_stats             | castedtitanic |   (age)   | ((age > 25) AND (age < 40)) | 25/06/2023 09:22:26
            Mer information finns i dokumentationen om datauppsättningsstatistik.
TABLESAMPLE tablesample
Adobe Experience Platform Query Service innehåller exempeldatauppsättningar som en del av de ungefärliga frågebearbetningsfunktionerna.
Datauppsättningsexempel används bäst när du inte behöver ett exakt svar för en sammanställningsåtgärd över en datauppsättning. Om du vill utföra mer effektiva undersökande frågor på stora datamängder genom att skicka en ungefärlig fråga för att returnera ett ungefärligt svar använder du funktionen TABLESAMPLE.
Exempeldatauppsättningar skapas med enhetliga slumpmässiga exempel från befintliga Azure Data Lake Storage-datauppsättningar (ADLS), med endast en procentandel av posterna från originalet. Exempelfunktionen för datauppsättningar utökar kommandot ANALYZE TABLE med SQL-kommandona TABLESAMPLE och SAMPLERATE.
I exemplet nedan visar rad 1 hur du beräknar ett 5 %-prov av tabellen. Rad 2 visar hur du beräknar ett 5 %-prov från en filtrerad vy av data i tabellen.
Exempel
ANALYZE TABLE tableName TABLESAMPLE SAMPLERATE 5;
ANALYZE TABLE tableName FILTERCONTEXT (timestamp >= to_timestamp('2023-01-01')) TABLESAMPLE SAMPLERATE 5:
            Mer information finns i exempeldokumentationen för datauppsättningen.
BÖRJA
Kommandot BEGIN eller alternativt kommandot BEGIN WORK eller BEGIN TRANSACTION initierar ett transaktionsblock. Alla programsatser som infogas efter kommandot begin körs i en enda transaktion tills ett explicit COMMIT- eller ROLLBACK-kommando anges. Det här kommandot är samma som START TRANSACTION.
BEGIN
BEGIN WORK
BEGIN TRANSACTION
            STÄNG
Kommandot CLOSE frigör resurser som är kopplade till en öppen markör. När markören har stängts tillåts inga efterföljande åtgärder på den. En markör bör stängas när den inte längre behövs.
CLOSE name
CLOSE ALL
            Om CLOSE name används representerar name namnet på en öppen markör som måste stängas. Om CLOSE ALL används stängs alla öppna markörer.
DEALOCATE
Om du vill frigöra en tidigare förberedd SQL-sats använder du kommandot DEALLOCATE. Om du inte uttryckligen har frigjort en förberedd sats, frigörs den när sessionen avslutas. Mer information om förberedda satser finns i avsnittet PREPARE command.
DEALLOCATE name
DEALLOCATE ALL
            Om DEALLOCATE name används representerar name namnet på den förberedda satsen som måste frigöras. Om DEALLOCATE ALL används frigörs alla förberedda satser.
DEKLARERA
Med kommandot DECLARE kan en användare skapa en markör som kan användas för att hämta ett litet antal rader från en större fråga. När markören har skapats hämtas rader från den med FETCH.
DECLARE name CURSOR FOR query
            namequerySELECT- eller VALUES-kommando som innehåller de rader som ska returneras av markören.KÖR
Kommandot EXECUTE används för att köra en tidigare förberedd sats. Eftersom förberedda satser endast finns under en session, måste den förberedda satsen ha skapats av en PREPARE-sats som kördes tidigare i den aktuella sessionen. Mer information om hur du använder förberedda satser finns i avsnittet PREPARE command.
Om programsatsen PREPARE som skapade programsatsen angav vissa parametrar, måste en kompatibel uppsättning parametrar skickas till programsatsen EXECUTE. Om de här parametrarna inte skickas genereras ett fel.
EXECUTE name [ ( parameter ) ]
            nameparameterFÖRKLARA
Kommandot EXPLAIN visar körningsplanen för den angivna satsen. Körningsplanen visar hur tabellerna som programsatsen refererar till skannas. Om flera tabeller refereras visas vilka kopplingsalgoritmer som används för att sammanfoga de rader som krävs från varje indatatabell.
EXPLAIN statement
            Om du vill definiera svarsformatet använder du nyckelordet FORMAT med kommandot EXPLAIN.
EXPLAIN FORMAT { TEXT | JSON } statement
            FORMATFORMAT för att ange utdataformat. De tillgängliga alternativen är TEXT eller JSON. Utdata som inte är text innehåller samma information som textutdataformatet, men är enklare att tolka i program. Parametern är som standard TEXT.statementSELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE, CREATE TABLE AS eller CREATE MATERIALIZED VIEW AS vars körningsplan du vill se.SELECT-sats kan returnera ignoreras när den körs med nyckelordet EXPLAIN. Andra biverkningar av satsen inträffar som vanligt.Exempel
I följande exempel visas planen för en enkel fråga i en tabell med en enda integer-kolumn och 10000 rader:
EXPLAIN SELECT * FROM foo;
                                   QUERY PLAN
|---------------------------------------------------------
 Seq Scan on foo (dataSetId = "6307eb92f90c501e072f8457", dataSetName = "foo") [0,1000000242,6973776840203d3d,6e616c58206c6153,6c6c6f430a3d4d20,74696d674c746365]
(1 row)
            FETCH
Kommandot FETCH hämtar rader med en markör som skapats tidigare.
FETCH num_of_rows [ IN | FROM ] cursor_name
            num_of_rowscursor_nameFÖRBEREDA prepare
Med kommandot PREPARE kan du skapa en förberedd programsats. En förberedd programsats är ett objekt på serversidan som kan användas för att mallatisera liknande SQL-programsatser.
Förberedda programsatser kan innehålla parametrar, som är värden som ersätts med programsatsen när den körs. Parametrar refereras efter position, med $1, $2 och så vidare, när förberedda satser används.
Du kan också ange en lista med parameterdatatyper. Om en parameters datatyp inte finns med i listan kan typen härledas från kontexten.
PREPARE name [ ( data_type [, ...] ) ] AS SELECT
            namedata_typeROLLBACK
Kommandot ROLLBACK ångrar den aktuella transaktionen och tar bort alla uppdateringar som gjorts av transaktionen.
ROLLBACK
ROLLBACK WORK
            MARKERA I
Kommandot SELECT INTO skapar en ny tabell och fyller den med data som beräknas av en fråga. Data returneras inte till klienten, vilket är fallet med ett normalt SELECT-kommando. Den nya tabellens kolumner har de namn och datatyper som är associerade med utdatakolumnerna för kommandot SELECT.
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ [ AS ] output_name ] [, ...]
    INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
            Mer information om SELECT-standardfrågeparametrarna finns i SELECT-frågeavsnittet. I det här avsnittet visas endast parametrar som är exklusiva för kommandot SELECT INTO.
TEMPORARY eller TEMPUNLOGGEDnew_tableExempel
Följande fråga skapar en ny tabell films_recent som endast består av de senaste posterna från tabellen films:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
            VISA
Kommandot SHOW visar den aktuella inställningen för körningsparametrar. Dessa variabler kan ställas in med programsatsen SET, genom att redigera konfigurationsfilen postgresql.conf, via miljövariabeln PGOPTIONS (när du använder libpq eller ett libpq-baserat program) eller via kommandoradsflaggor när Postgres-servern startas.
SHOW name
SHOW ALL
            nameSERVER_VERSION: Den här parametern visar serverns versionsnummer.SERVER_ENCODING: Den här parametern visar kodningen för teckenuppsättningen på serversidan.LC_COLLATE: Den här parametern visar databasens språkinställning för sortering (textordning).LC_CTYPE: Den här parametern visar databasens språkområdesinställning för teckenklassificering.IS_SUPERUSER: Den här parametern visar om den aktuella rollen har superanvändarbehörighet.ALLExempel
Följande fråga visar den aktuella inställningen för parametern DateStyle.
SHOW DateStyle;
             DateStyle
|-----------
 ISO, MDY
(1 row)
            COPY
Kommandot COPY duplicerar utdata från en SELECT-fråga till en angiven plats. Användaren måste ha åtkomst till den här platsen för att det här kommandot ska lyckas.
COPY query
    TO '%scratch_space%/folder_location'
    [  WITH FORMAT 'format_name']
            queryformat_nameformat_name kan vara en av parquet, csv eller json. Som standard är värdet parquet.adl://<ADLS_URI>/users/<USER_ID>/acp_foundation_queryService/folder_location/<QUERY_ID>ALTER TABLE alter-table
Med kommandot ALTER TABLE kan du lägga till eller släppa begränsningar för primär eller extern nyckel och lägga till kolumner i tabellen.
LÄGG TILL ELLER SLÄPP BEGRÄNSNINGAR
Följande SQL-frågor visar exempel på hur du lägger till eller släpper begränsningar i en tabell. Begränsningar för primärnyckel och sekundärnyckel kan läggas till i flera kolumner med kommaseparerade värden. Du kan skapa sammansatta tangenter genom att skicka två eller flera kolumnnamnsvärden enligt exemplen nedan.
Definiera primära eller sammansatta nycklar
ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY ( column_name ) NAMESPACE namespace
ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY ( column_name1, column_name2 ) NAMESPACE namespace
            Definiera en relation mellan tabeller baserat på en eller flera nycklar
ALTER TABLE table_name ADD CONSTRAINT FOREIGN KEY ( column_name ) REFERENCES referenced_table_name ( primary_column_name )
ALTER TABLE table_name ADD CONSTRAINT FOREIGN KEY ( column_name1, column_name2 ) REFERENCES referenced_table_name ( primary_column_name1, primary_column_name2 )
            Definiera en identitetskolumn
ALTER TABLE table_name ADD CONSTRAINT PRIMARY IDENTITY ( column_name ) NAMESPACE namespace
ALTER TABLE table_name ADD CONSTRAINT IDENTITY ( column_name ) NAMESPACE namespace
            Släpp en begränsning/relation/identitet
ALTER TABLE table_name DROP CONSTRAINT PRIMARY KEY ( column_name )
ALTER TABLE table_name DROP CONSTRAINT PRIMARY KEY ( column_name1, column_name2 )
ALTER TABLE table_name DROP CONSTRAINT FOREIGN KEY ( column_name )
ALTER TABLE table_name DROP CONSTRAINT FOREIGN KEY ( column_name1, column_name2 )
ALTER TABLE table_name DROP CONSTRAINT PRIMARY IDENTITY ( column_name )
ALTER TABLE table_name DROP CONSTRAINT IDENTITY ( column_name )
            table_namecolumn_namereferenced_table_nameprimary_column_nameLägga till eller släppa primära och sekundära identiteter
Om du vill lägga till eller ta bort begränsningar för både primära och sekundära identitetstabellkolumner använder du kommandot ALTER TABLE.
I följande exempel läggs en primär identitet och en sekundär identitet till genom att begränsningar läggs till.
ALTER TABLE t1 ADD CONSTRAINT PRIMARY IDENTITY (id) NAMESPACE 'IDFA';
ALTER TABLE t1 ADD CONSTRAINT IDENTITY(id) NAMESPACE 'IDFA';
            Identiteter kan också tas bort genom att begränsningar släpps, vilket visas i exemplet nedan.
ALTER TABLE t1 DROP CONSTRAINT PRIMARY IDENTITY (c1) ;
ALTER TABLE t1 DROP CONSTRAINT IDENTITY (c1) ;
            Mer detaljerad information finns i dokumentet om att ställa in identiteter i en ad hoc-datauppsättning.
LÄGG TILL KOLUMN
Följande SQL-frågor visar exempel på hur du lägger till kolumner i en tabell.
ALTER TABLE table_name ADD COLUMN column_name data_type
ALTER TABLE table_name ADD COLUMN column_name_1 data_type1, column_name_2 data_type2
            Datatyper som stöds
I följande tabell visas godkända datatyper för att lägga till kolumner i en tabell med Postgres SQL, XDM och Accelerated Database Recovery (ADR) i Azure SQL.
bigintint8bigintintegerint4integersmallintint2smallinttinyintint1tinyintvarchar(len)stringvarchar(len)varchar används bäst när kolumndatainmatningarnas storlek varierar avsevärt.doublefloat8double precisionFLOAT8 och FLOAT är giltiga synonymer för DOUBLE PRECISION. double precision är en flyttalsdatatyp. Flyttalsvärden sparas i 8 byte.double precisionfloat8double precisionFLOAT8 är en giltig synonym för double precision.double precision är en flyttalsdatatyp. Flyttalsvärden sparas i 8 byte.datedatedatedate är 4-byte-lagrade kalenderdatumvärden utan tidsstämpelinformation. Giltiga datum är från 01-01-0001 till 12-31-9999.datetimedatetimedatetimedatetime innehåller kvalificerare för: år, månad, dag, timme, sekund och bråk. En datetime-deklaration kan innehålla alla deluppsättningar av dessa tidsenheter som är sammanfogade i den sekvensen, eller till och med bara en enda tidsenhet.char(len)stringchar(len)char(len) används för att ange att objektet är ett tecken med fast längd.LÄGG TILL SCHEMA
Följande SQL-fråga visar ett exempel på hur du lägger till en tabell i en databas/ett schema.
ALTER TABLE table_name ADD SCHEMA database_name.schema_name
            TA BORT SCHEMA
Följande SQL-fråga visar ett exempel på hur du tar bort en tabell från en databas/ett schema.
ALTER TABLE table_name REMOVE SCHEMA database_name.schema_name
            Parametrar
table_namecolumn_namedata_typeVISA PRIMÄRNYCKLAR
Kommandot SHOW PRIMARY KEYS visar alla primärnyckelbegränsningar för den angivna databasen.
SHOW PRIMARY KEYS
                tableName | columnName    | datatype | namespace
|------------------+----------------------+----------+-----------
 table_name_1 | column_name1  | text     | "ECID"
 table_name_2 | column_name2  | text     | "AAID"
            VISA FRÄMSTA TANGENTER
Kommandot SHOW FOREIGN KEYS listar alla begränsningar för främmande nycklar för den angivna databasen.
SHOW FOREIGN KEYS
                tableName   |     columnName      | datatype | referencedTableName | referencedColumnName | namespace
|------------------+---------------------+----------+---------------------+----------------------+-----------
 table_name_1   | column_name1        | text     | table_name_3        | column_name3         |  "ECID"
 table_name_2   | column_name2        | text     | table_name_4        | column_name4         |  "AAID"
            VISA DATAGROUPS
Kommandot SHOW DATAGROUPS returnerar en tabell med alla associerade databaser. För varje databas innehåller tabellen schema, grupptyp, underordnad typ, underordnat namn och underordnat ID.
SHOW DATAGROUPS
               Database   |      Schema       | GroupType |      ChildType       |                     ChildName                       |               ChildId
  -------------+-------------------+-----------+----------------------+----------------------------------------------------+--------------------------------------
   adls_db     | adls_scheema      | ADLS      | Data Lake Table      | adls_table1                                        | 6149ff6e45cfa318a76ba6d3
   adls_db     | adls_scheema      | ADLS      | Accelerated Store | _table_demo1                                       | 22df56cf-0790-4034-bd54-d26d55ca6b21
   adls_db     | adls_scheema      | ADLS      | View                 | adls_view1                                         | c2e7ddac-d41c-40c5-a7dd-acd41c80c5e9
   adls_db     | adls_scheema      | ADLS      | View                 | adls_view4                                         | b280c564-df7e-405f-80c5-64df7ea05fc3
            VISA DATAGROUPS FÖR register
Kommandot SHOW DATAGROUPS FOR 'table_name' returnerar en tabell med alla associerade databaser som innehåller parametern som underordnad. För varje databas innehåller tabellen schema, grupptyp, underordnad typ, underordnat namn och underordnat ID.
SHOW DATAGROUPS FOR 'table_name'
            Parametrar
table_name: Namnet på tabellen som du vill hitta associerade databaser för.
   Database   |      Schema       | GroupType |      ChildType       |                     ChildName                      |               ChildId
  -------------+-------------------+-----------+----------------------+----------------------------------------------------+--------------------------------------
   dwh_db_demo | schema2           | QSACCEL   | Accelerated Store | _table_demo2                                       | d270f704-0a65-4f0f-b3e6-cb535eb0c8ce
   dwh_db_demo | schema1           | QSACCEL   | Accelerated Store | _table_demo2                                       | d270f704-0a65-4f0f-b3e6-cb535eb0c8ce
   qsaccel     | profile_aggs      | QSACCEL   | Accelerated Store | _table_demo2                                       | d270f704-0a65-4f0f-b3e6-cb535eb0c8ce