- Kategorien:
Funktionen für semistrukturierte und strukturierte Daten (Zuordnung/Map)
MAP_PICK¶
Gibt ein neues MAP-Objekt zurück, das die angegebenen Schlüssel-Wert-Paare eines bestehenden MAP-Objekts enthält.
Um die Schlüssel-Wert-Paare zu identifizieren, die in das neue Zuordnungsobjekt aufgenommen werden sollen, übergeben Sie die Schlüssel als Argumente oder als ein Array mit Schlüsseln.
Wenn ein bestimmter Schlüssel im Eingabe-Zuordnungsobjekt nicht vorhanden ist, wird der Schlüssel ignoriert.
Syntax¶
MAP_PICK( <map>, <key1> [, <key2>, ... ] )
MAP_PICK( <map>, <array> )
Argumente¶
map
Das Eingabe-Zuordnungsobjekt.
key1,key2
Ein oder mehrere Schlüssel, die die Schlüssel-Wert-Paare identifizieren, die in das zurückgegebene Zuordnungsobjekt aufgenommen werden sollen.
array
Ein Array mit Schlüsseln, die die Schlüssel-Wert-Paare bezeichnen, die in das zurückgegebene Zuordnungsobjekt aufgenommen werden sollen. Sie können ein semistrukturiertes ARRAY oder ein strukturiertes ARRAY angeben.
Rückgabewerte¶
Gibt ein neues MAP-Objekt zurück, das einige der Schlüssel-Wert-Paare eines vorhandenen MAP-Objekts enthält.
Beispiele¶
Erstellen Sie ein neues Zuordnungsobjekt, das zwei der drei Schlüssel-Wert-Paare aus einem vorhandenen Zuordnungsobjekt enthält:
SELECT MAP_PICK({'a':1,'b':2,'c':3}::MAP(VARCHAR,NUMBER),'a', 'b')
AS new_map;
+-----------+
| NEW_MAP |
|-----------|
| { |
| "a": 1, |
| "b": 2 |
| } |
+-----------+
Im vorherigen Beispiel werden die Schlüssel als Argumente an MAP_PICK übergeben. Sie können auch ein Array verwenden, um die Schlüssel anzugeben:
SELECT MAP_PICK({'a':1,'b':2,'c':3}::MAP(VARCHAR,NUMBER), ['a', 'b'])
AS new_map;
+-----------+
| NEW_MAP |
|-----------|
| { |
| "a": 1, |
| "b": 2 |
| } |
+-----------+
Erstellen Sie eine temporäre Tabelle, die MAP-Werte enthält:
CREATE OR REPLACE TEMP TABLE demo_maps(
id INTEGER,
attrs MAP(VARCHAR, VARCHAR),
defaults MAP(VARCHAR, VARCHAR),
keep_keys ARRAY(VARCHAR),
ins_key VARCHAR,
ins_val VARCHAR,
update_existing BOOLEAN,
del_key1 VARCHAR,
del_key2 VARCHAR);
INSERT INTO demo_maps SELECT
1,
{'color':'red','size':'M','brand':'Acme'}::MAP(VARCHAR, VARCHAR),
{'currency':'USD','size':'L'}::MAP(VARCHAR, VARCHAR),
['color','brand']::ARRAY(VARCHAR),
'material',
'cotton',
TRUE,
'size',
'brand';
INSERT INTO demo_maps SELECT
2,
{'color':'blue','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
{'currency':'EUR','size':'M','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
['brand','currency']::ARRAY(VARCHAR),
'brand',
'ZC',
FALSE,
'currency',
'material';
Fragen Sie die Tabelle ab, um die Daten anzuzeigen:
SELECT * FROM demo_maps;
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
| ID | ATTRS | DEFAULTS | KEEP_KEYS | INS_KEY | INS_VAL | UPDATE_EXISTING | DEL_KEY1 | DEL_KEY2 |
|----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------|
| 1 | { | { | [ | material | cotton | True | size | brand |
| | "brand": "Acme", | "currency": "USD", | "color", | | | | | |
| | "color": "red", | "size": "L" | "brand" | | | | | |
| | "size": "M" | } | ] | | | | | |
| | } | | | | | | | |
| 2 | { | { | [ | brand | ZC | False | currency | material |
| | "brand": "ZenCo", | "brand": "ZenCo", | "brand", | | | | | |
| | "color": "blue" | "currency": "EUR", | "currency" | | | | | |
| | } | "size": "M" | ] | | | | | |
| | | } | | | | | | |
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
Durch das Verwenden der Schlüssel in der keep_keys
-Spalte werden neue MAP-Werte aus den MAP-Werten in der attrs
-Spalte zurückgegeben:
SELECT id, MAP_PICK(attrs, keep_keys) AS attrs_subset
FROM demo_maps;
+----+--------------------+
| ID | ATTRS_SUBSET |
|----+--------------------|
| 1 | { |
| | "brand": "Acme", |
| | "color": "red" |
| | } |
| 2 | { |
| | "brand": "ZenCo" |
| | } |
+----+--------------------+