- Categorias:
- Funções de dados semiestruturados e estruturados (Matriz/objeto) 
OBJECT_CONSTRUCT¶
Devolve um OBJECT construído a partir dos argumentos.
- Consulte também:
Sintaxe¶
OBJECT_CONSTRUCT( [<key>, <value> [, <key>, <value> , ...]] )
OBJECT_CONSTRUCT(*)
Argumentos¶
- key
- A chave em um par chave-valor. Cada chave é um valor VARCHAR. 
- value
- O valor que está associado à chave. O valor pode ser qualquer tipo de dados. 
- *
- Quando invocado com um asterisco (curinga), o valor de OBJECT é construído a partir dos dados especificados usando os nomes de atributo como chaves e os valores associados como valores. Consulte os exemplos abaixo. - Ao passar um curinga para a função, você pode qualificar o curinga com o nome ou alias da tabela. Por exemplo, para passar todas as colunas da tabela nomeadas - mytable, especifique o seguinte:- (mytable.*) - Também é possível usar as palavras-chave ILIKE e EXCLUDE para filtrar: - ILIKE filtra nomes de colunas que correspondem ao padrão especificado. Apenas um padrão é permitido. Por exemplo: - (* ILIKE 'col1%') 
- EXCLUDE filtra nomes de coluna que não correspondem à coluna ou colunas especificadas. Por exemplo: - (* EXCLUDE col1) (* EXCLUDE (col1, col2)) 
 - Os qualificadores são válidos quando você usa essas palavras-chave. O exemplo a seguir usa a palavra-chave ILIKE para filtrar todas as colunas que correspondem ao padrão - col1%na tabela- mytable:- (mytable.* ILIKE 'col1%') - As palavras-chave ILIKE e EXCLUDE não podem ser combinadas em uma única chamada de função. - Também é possível especificar o curinga em uma constante de objeto. - Para esta função, as palavras-chave ILIKE e EXCLUDE são válidas somente em uma lista SELECT ou cláusula GROUP BY. - Para obter mais informações sobre as palavras-chave ILIKE e EXCLUDE, consulte a seção «Parâmetros» em SELECT. 
Retornos¶
Retorna um valor do tipo OBJECT.
Notas de uso¶
- Se a chave ou valor for NULL (isto é, SQL NULL), o par chave-valor será omitido do objeto resultante. Um par chave-valor consistindo de uma cadeia de caracteres diferente de NULL como a chave e um valor JSON nulo (ou seja, - PARSE_JSON('NULL')) não é omitido. Para obter mais informações, consulte VARIANT null.
- O objeto construído não preserva necessariamente a ordem original dos pares chave-valor. 
- Em muitos contextos, você pode usar uma constante de OBJECT (também chamada de literal de OBJECT) em vez da função OBJECT_CONSTRUCT. 
Exemplos¶
Este exemplo mostra como construir um objeto simples:
SELECT OBJECT_CONSTRUCT('a', 1, 'b', 'BBBB', 'c', NULL);
+--------------------------------------------------+
| OBJECT_CONSTRUCT('A', 1, 'B', 'BBBB', 'C', NULL) |
|--------------------------------------------------|
| {                                                |
|   "a": 1,                                        |
|   "b": "BBBB"                                    |
| }                                                |
+--------------------------------------------------+
Este exemplo usa * para obter o nome do atributo e o valor da cláusula FROM:
CREATE OR REPLACE TABLE demo_table_1 (province VARCHAR, created_date DATE);
INSERT INTO demo_table_1 (province, created_date) VALUES
  ('Manitoba', '2024-01-18'::DATE),
  ('Alberta', '2024-01-19'::DATE);
SELECT province, created_date
  FROM demo_table_1
  ORDER BY province;
+----------+--------------+
| PROVINCE | CREATED_DATE |
|----------+--------------|
| Alberta  | 2024-01-19   |
| Manitoba | 2024-01-18   |
+----------+--------------+
SELECT OBJECT_CONSTRUCT(*) AS oc
  FROM demo_table_1
  ORDER BY oc['PROVINCE'];
+---------------------------------+
| OC                              |
|---------------------------------|
| {                               |
|   "CREATED_DATE": "2024-01-19", |
|   "PROVINCE": "Alberta"         |
| }                               |
| {                               |
|   "CREATED_DATE": "2024-01-18", |
|   "PROVINCE": "Manitoba"        |
| }                               |
+---------------------------------+
Este exemplo usa * e inclui a palavra-chave ILIKE para filtrar a saída:
SELECT OBJECT_CONSTRUCT(* ILIKE 'prov%') AS oc
  FROM demo_table_1
  ORDER BY oc['PROVINCE'];
+--------------------------+
| OC                       |
|--------------------------|
| {                        |
|   "PROVINCE": "Alberta"  |
| }                        |
| {                        |
|   "PROVINCE": "Manitoba" |
| }                        |
+--------------------------+
Este exemplo usa * e inclui a palavra-chave EXCLUDE para filtrar a saída:
SELECT OBJECT_CONSTRUCT(* EXCLUDE province) AS oc
  FROM demo_table_1
  ORDER BY oc['PROVINCE'];
+--------------------------------+
| OC                             |
|--------------------------------|
| {                              |
|   "CREATED_DATE": "2024-01-18" |
| }                              |
| {                              |
|   "CREATED_DATE": "2024-01-19" |
| }                              |
+--------------------------------+
Este exemplo é equivalente ao exemplo anterior, mas usa uma constante de objeto em vez da função OBJECT_CONSTRUCT:
SELECT {* EXCLUDE province} AS oc
  FROM demo_table_1
  ORDER BY oc['PROVINCE'];
+--------------------------------+
| OC                             |
|--------------------------------|
| {                              |
|   "CREATED_DATE": "2024-01-18" |
| }                              |
| {                              |
|   "CREATED_DATE": "2024-01-19" |
| }                              |
+--------------------------------+
Este é outro exemplo usando *. Neste caso, os nomes dos atributo não são especificados, então o Snowflake usa COLUMN1, COLUMN2 e assim por diante:
SELECT OBJECT_CONSTRUCT(*) FROM VALUES(1,'x'), (2,'y');
+---------------------+
| OBJECT_CONSTRUCT(*) |
|---------------------|
| {                   |
|   "COLUMN1": 1,     |
|   "COLUMN2": "x"    |
| }                   |
| {                   |
|   "COLUMN1": 2,     |
|   "COLUMN2": "y"    |
| }                   |
+---------------------+
Este exemplo usa SQL NULL e a cadeia de caracteres 'null':
SELECT OBJECT_CONSTRUCT(
  'Key_One', PARSE_JSON('NULL'), 
  'Key_Two', NULL, 
  'Key_Three', 'null') AS obj;
+-----------------------+
| OBJ                   |
|-----------------------|
| {                     |
|   "Key_One": null,    |
|   "Key_Three": "null" |
| }                     |
+-----------------------+
OBJECT_CONSTRUCT oferece suporte a expressões e consultas para adicionar, modificar ou omitir valores do objeto JSON.
SELECT OBJECT_CONSTRUCT(
    'foo', 1234567,
    'dataset_size', (SELECT COUNT(*) FROM demo_table_1),
    'distinct_province', (SELECT COUNT(DISTINCT province) FROM demo_table_1),
    'created_date_seconds', extract(epoch_seconds, created_date)
  )  AS json_object
  FROM demo_table_1;
+---------------------------------------+
| JSON_OBJECT                           |
|---------------------------------------|
| {                                     |
|   "created_date_seconds": 1705536000, |
|   "dataset_size": 2,                  |
|   "distinct_province": 2,             |
|   "foo": 1234567                      |
| }                                     |
| {                                     |
|   "created_date_seconds": 1705622400, |
|   "dataset_size": 2,                  |
|   "distinct_province": 2,             |
|   "foo": 1234567                      |
| }                                     |
+---------------------------------------+