CREATE STREAM

Cria um novo fluxo no esquema atual/especificado ou substitui um fluxo existente. Um fluxo registra as alterações na linguagem de manipulação de dados (DML) feitas em uma tabela, tabela de diretório, tabela externa ou as tabelas subjacentes em uma visualização (incluindo visualizações seguras). O objeto para o qual as alterações são registradas é chamado de objeto de origem.

Além disso, este comando oferece suporte à seguinte variante:

  • CREATE STREAM … CLONE (cria um clone de um fluxo existente)

Consulte também:

ALTER STREAM , DROP STREAM , SHOW STREAMS , DESCRIBE STREAM

Sintaxe

A sintaxe do comando difere dependendo do objeto no qual o fluxo é criado:

-- table
CREATE [ OR REPLACE ] STREAM [IF NOT EXISTS]
  <name>
  [ COPY GRANTS ]
  ON TABLE <table_name>
  [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> | STREAM => '<name>' } ) ]
  [ APPEND_ONLY = TRUE | FALSE ]
  [ SHOW_INITIAL_ROWS = TRUE | FALSE ]
  [ COMMENT = '<string_literal>' ]

-- External table
CREATE [ OR REPLACE ] STREAM [IF NOT EXISTS]
  <name>
  [ COPY GRANTS ]
  ON EXTERNAL TABLE <external_table_name>
  [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> | STREAM => '<name>' } ) ]
  [ INSERT_ONLY = TRUE ]
  [ COMMENT = '<string_literal>' ]

-- Directory table
CREATE [ OR REPLACE ] STREAM [IF NOT EXISTS]
  <name>
  [ COPY GRANTS ]
  ON STAGE <stage_name>
  [ COMMENT = '<string_literal>' ]

-- View
CREATE [ OR REPLACE ] STREAM [IF NOT EXISTS]
  <name>
  [ COPY GRANTS ]
  ON VIEW <view_name>
  [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> | STREAM => '<name>' } ) ]
  [ APPEND_ONLY = TRUE | FALSE ]
  [ SHOW_INITIAL_ROWS = TRUE | FALSE ]
  [ COMMENT = '<string_literal>' ]
Copy

Sintaxe da variante

CREATE STREAM … CLONE

Cria um novo fluxo com a mesma definição que o fluxo de origem. O clone herda o offset atual (ou seja, a versão da tabela) transacional atual do fluxo de origem.

CREATE [ OR REPLACE ] STREAM <name> CLONE <source_stream>
  [ COPY GRANTS ]
  [ ... ]
Copy

Para obter mais informações sobre clonagem, consulte CREATE <objeto> … CLONE.

Parâmetros obrigatórios

name

Cadeia de caracteres que especifica o identificador (ou seja, nome) do fluxo; deve ser único para o esquema em que o fluxo é criado.

Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo, "My object"). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

Para obter mais detalhes, consulte Requisitos para identificadores.

table_name

Cadeia de caracteres que especifica o identificador (ou seja, nome) da tabela cujas alterações são rastreadas pelo fluxo (ou seja, a tabela de origem).

Controle de acesso

Para consultar um fluxo, uma função deve ter o privilégio SELECT na tabela subjacente.

external_table_name

Cadeia de caracteres que especifica o identificador (ou seja, nome) da tabela externa cujas alterações são rastreadas pelo fluxo (ou seja, a tabela externa de origem).

Controle de acesso

Para consultar um fluxo, uma função deve ter o privilégio SELECT na tabela externa subjacente.

stage_name

Cadeia de caracteres que especifica o identificador (ou seja, nome) para o estágio cujas alterações na tabela de diretório são rastreadas pelo fluxo (ou seja, a tabela de diretório de origem).

Controle de acesso

Para consultar um fluxo, uma função deve ter o privilégio USAGE (estágio externo) ou READ (estágio interno) no estágio subjacente.

view_name

Cadeia de caracteres que especifica o identificador (ou seja, nome) da visualização de origem. As faixas de fluxo da DML mudam para as tabelas subjacentes na exibição.

Para obter mais informações sobre os fluxos em visualizações, consulte Streams on Views.

Controle de acesso

Para consultar um fluxo, uma função deve ter o privilégio SELECT na visualização.

Parâmetros opcionais

COPY GRANTS

Especifica manter as permissões de acesso do fluxo original quando um novo fluxo é criado usando qualquer uma das seguintes variantes CREATE STREAM:

  • CREATE OR REPLACE STREAM

  • CREATE STREAM … CLONE

O parâmetro copia todas as permissões, exceto OWNERSHIP, do fluxo existente para o novo fluxo. Por padrão, a função que executa o comando CREATE STREAM é a proprietária do novo fluxo.

Nota

  • Se a instrução CREATE STREAM fizer referência a mais de um fluxo (por exemplo, create or replace stream t1 clone t2;), a cláusula COPY GRANTS dá precedência ao fluxo que está sendo substituído.

  • A saída SHOW GRANTS para o fluxo de substituição relaciona o cessionário para os privilégios copiados como a função que executou a instruçãoCREATE STREAM, com o carimbo de data/hora atual quando a instrução foi executada.

  • A operação de cópia de concessões ocorre atomicamente no comando CREATE STREAM (ou seja, dentro da mesma transação).

Nota

Este parâmetro não é suportado atualmente.

AT ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> | STREAM => “<name>” ) | BEFORE ( TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> ) }

Cria um fluxo em um momento/ponto específico no passado (usando Time Travel). A cláusula AT | BEFORE determina o ponto no passado a partir do qual os dados históricos são solicitados:

  • A palavra-chave AT especifica que a solicitação inclui quaisquer alterações feitas por uma instrução ou transação com um carimbo de data/hora igual ao parâmetro especificado.

    O valor STREAM => '<nome>' é especial. Quando fornecida, a instrução CREATE STREAM cria o novo fluxo com o mesmo offset do fluxo especificado. Você também pode fornecer este valor ao recriar um fluxo existente (usando as palavras-chave OR REPLACE) para reter o offfset atual do fluxo depois de recriado. '<nome>' é o identificador (ou seja, nome) do fluxo existente cujo offset é copiado para o novo fluxo ou fluxo recriado.

    O fluxo novo ou recriado avança o offset, como de costume, quando o fluxo é utilizado em uma transação DML.

  • A palavra-chave BEFORE especifica que o pedido se refere a um ponto imediatamente anterior ao parâmetro especificado.

Nota

Se nenhum dado de rastreamento de alteração estiver disponível no objeto de origem no ponto no passado especificado na cláusula AT | BEFORE, a instrução CREATE STREAM falha. Nenhum fluxo pode ser criado em um momento no passado antes que o rastreamento de alterações fosse registrado.

APPEND_ONLY = TRUE | FALSE

Somente suportado para fluxos em tabelas padrão ou fluxos em visualizações que consultem tabelas padrão.

Especifica se este é um fluxo apenas para anexação. Fluxos apenas para indexação rastreiam somente inserções de linha. As operações de atualização e exclusão (incluindo truncagens de tabela) não são registradas. Por exemplo, se 10 linhas forem inseridas em uma tabela e então 5 dessas linhas forem apagadas antes que o deslocamento de um fluxo somente de anexação seja avançado, o fluxo registra 10 linhas.

Este tipo de fluxo melhora o desempenho da consulta em relação aos fluxos padrão e é muito útil para extrair, carregar, transformar (ELT) e cenários semelhantes que dependem exclusivamente de inserções de linha.

Um fluxo padrão une as linhas excluídas e inseridas no conjunto de alterações para determinar quais linhas foram excluídas e quais foram atualizadas. Um fluxo apenas para anexação retorna apenas as linhas anexadas e, portanto, pode ser muito mais eficiente do que um fluxo padrão. Por exemplo, a tabela de origem pode ser truncada imediatamente depois que as linhas de um fluxo apenas para anexação são consumidas, e as exclusões de registros não contribuirão para sobrecarga na próxima vez em que o fluxo for consultado ou consumido.

Padrão

FALSE

INSERT_ONLY = TRUE | FALSE

Obrigatório para fluxos em tabelas externas. Não suportado por fluxos em outros objetos.

Especifica se este é um fluxo somente de inserção. Fluxos apenas para inserção rastreiam somente inserções de linha; eles não registram operações de exclusão que removem linhas de um conjunto inserido (ou seja, sem operações). Por exemplo, entre quaisquer dois offsets, se File1 for removido do local de armazenamento em nuvem referenciado pela tabela externa, e File2 for adicionado, o fluxo só retorna registros para as linhas em File2. Ao contrário de quando dados de captura de dados (CDC) são rastreados para tabelas padrão, o Snowflake não pode acessar os registros históricos para arquivos em armazenamento em nuvem.

Padrão

FALSE

SHOW_INITIAL_ROWS = TRUE | FALSE

Especifica os registros a serem retornados na primeira vez que o fluxo é consumido.

TRUE

O fluxo retorna somente as linhas que existiam no objeto de origem no momento em que o fluxo foi criado. A coluna METADATA$ISUPDATE mostra um valor FALSE nestas linhas. Posteriormente, o fluxo retorna qualquer alteração da DML no objeto de origem desde o offset mais recente; ou seja, o comportamento normal do fluxo.

Este parâmetro permite inicializar qualquer processo downstream com o conteúdo do objeto de origem para o fluxo.

FALSE

O fluxo retorna qualquer alteração da DML no objeto de origem desde o offset mais recente.

Padrão

FALSE

COMMENT = 'string_literal'

Cadeia de caracteres (literal) que especifica um comentário para o fluxo.

Padrão: sem valor

Saída

A saída para um fluxo inclui as mesmas colunas do objeto de origem com as seguintes colunas adicionais:

  • METADATA$ACTION: especifica a ação (INSERT ou DELETE).

  • METADATA$ISUPDATE: especifica se a ação registrada (INSERT ou DELETE) faz parte de um UPDATE aplicado às linhas da tabela ou visualização de origem.

    Observe que os fluxos registram as diferenças entre dois offsets. Se uma linha for adicionada e depois atualizada no offset atual, a alteração do delta é uma nova linha. A linha METADATA$ISUPDATE registra um valor FALSE.

  • METADATA$ROW_ID: especifica a ID única e imutável para a linha, que pode ser usada para rastrear alterações em linhas específicas ao longo do tempo.

Requisitos de controle de acesso

Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:

Fluxos em tabelas padrão:

Objeto

Privilégio

Notas

Esquema

CREATE STREAM

Tabela

SELECT

Se o rastreamento de alterações não tiver sido ativado na tabela de origem (usando ALTER TABLE … SET CHANGE_TRACKING = TRUE), então somente o proprietário da tabela (ou seja, a função com o privilégio OWNERSHIP na tabela) pode criar o fluxo inicial na tabela. A criação do fluxo inicial permite automaticamente o rastreamento de alterações na tabela.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Fluxos em visualizações:

Objeto

Privilégio

Notas

Esquema

CREATE STREAM

Exibição

SELECT

Se o rastreamento de alterações não tiver sido ativado na exibição de origem e em suas tabelas subjacentes, então somente uma função que tenha o privilégio OWNERSHIP na exibição e proprietário de suas tabelas subjacentes pode criar o fluxo inicial na exibição. A criação do fluxo inicial permite automaticamente o rastreamento de alterações na tabela. Para instruções sobre como permitir o rastreamento de alterações em uma exibição e suas tabelas subjacentes, consulte Habilitação do rastreamento de alterações em exibições e tabelas subjacentes. Observe que permitir o rastreamento de alterações bloqueia as tabelas subjacentes enquanto o rastreamento de alterações está sendo ativado. Bloqueios nos objetos subjacentes podem causar latência nas operações DDL/DML com esses objetos. Para obter mais informações, consulte Bloqueio de recursos.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Fluxos em tabelas de diretório:

Objeto

Privilégio

Notas

Esquema

CREATE STREAM

Estágio

USAGE (estágio externo) ou READ (estágio interno)

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Fluxos em tabelas externas:

Objeto

Privilégio

Notas

Esquema

CREATE STREAM

Tabela externa

SELECT

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.

Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.

Notas de uso

  • Um fluxo pode ser consultado várias vezes para atualizar vários objetos na mesma transação e ele retornará os mesmos dados.

  • A posição do fluxo (ou seja, offset) é avançada quando o fluxo é usado em uma instrução DML. A posição é atualizada no fim da transação para o carimbo de data/hora inicial da transação. O fluxo descreve os registros de alteração a partir da posição atual do fluxo e terminando no carimbo de data/hora transacional atual.

    Para garantir que múltiplas instruções acessem os mesmos registros de alterações no fluxo, cerque-as com uma instrução de transação explícita (BEGINCOMMIT). Uma transação explícita bloqueia o fluxo, de modo que as atualizações da DML do objeto de origem não sejam relatadas ao fluxo até que a transação seja comprometida.

  • Os fluxos não têm período de Fail-safe ou período de retenção do Time Travel. Os metadados nestes objetos não podem ser recuperados se um fluxo for descartado.

  • Fluxos em tabelas compartilhadas:

    • O período de retenção de uma tabela de origem não é estendido automaticamente para evitar que qualquer fluxo na tabela se torne obsoleto.

  • Fluxos padrão não podem recuperar dados geoespaciais de alteração. Recomendamos a criação de fluxos apenas para anexação em objetos que contenham dados geoespaciais.

  • Fluxos em visualizações:

    • A criação do primeiro fluxo em uma visualização usando a função do proprietário da visualização (ou seja, a função com o privilégio OWNERSHIP na visualização) permite o rastreamento de alterações na visualização. Se a mesma função também for proprietária das tabelas subjacentes, o rastreamento de alterações também é habilitado nas tabelas. Se a função não tiver recebido o privilégio OWNERSHIP tanto na exibição quanto em suas tabelas subjacentes, então o rastreamento de alterações deve ser habilitado manualmente nos objetos aplicáveis. Para obter instruções, consulte Habilitação do rastreamento de alterações em exibições e tabelas subjacentes.

    • Dependendo do número de junções em uma visualização, uma única alteração nas tabelas subjacentes poderia resultar em um grande número de alterações na saída do fluxo.

    • Qualquer fluxo em uma determinada exibição é interrompido se a exibição de origem ou as tabelas subjacentes forem descartadas ou recriadas (usando CREATE OR REPLACE VIEW).

    • Qualquer fluxo em uma exibição segura adere às restrições da exibição segura.

      Se o proprietário de uma exibição não segura (ou seja, a função com o privilégio OWNERSHIP na exibição) a altera para uma exibição segura (usando ALTER VIEW … SET SECURE), qualquer fluxo na exibição aplica automaticamente as restrições de exibição segura.

      Além disso, o período de retenção para as tabelas subjacentes não é estendido automaticamente para evitar que qualquer fluxo na exibição segura se torne obsoleto.

    • Fluxos baseados em exibições onde a exibição utiliza funções não determinísticas podem retornar resultados não determinísticos.

      Por exemplo, os resultados das funções de contexto, como CURRENT_DATE e CURRENT_USER não são determinísticos. Os resultados de funções de geração de dados, tais como RANDOM, também não são determinísticos. Se uma exibição tiver uma função não determinística, então qualquer fluxo nesta exibição não será um instantâneo constante da saída da função. Em vez disso, o valor no fluxo pode mudar quando consultado.

      Recomendamos que você garanta que o não determinismo nos resultados de uma exibição não afete a exatidão dos resultados da consulta do fluxo.

      Para obter um exemplo, consulte Fluxo em uma exibição que chama uma função SQL não determinista.

  • Fluxos em tabelas de diretório: os valores da coluna METADATA$ROW_ID na saída do fluxo estão vazios.

  • Em relação aos metadados:

    Atenção

    Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.

  • Instruções CREATE OR REPLACE <object> são atômicas. Ou seja, quando um objeto é substituído, o objeto antigo é excluído e o novo objeto é criado em uma única transação.

Exemplos

Criação de um fluxo de tabela

Criar um fluxo na tabela mytable:

CREATE STREAM mystream ON TABLE mytable;
Copy

Uso do Time Travel com a tabela de origem

Criar um fluxo na tabela mytable como existia antes da data e hora no carimbo de data/hora especificado:

CREATE STREAM mystream ON TABLE mytable BEFORE (TIMESTAMP => TO_TIMESTAMP(40*365*86400));
Copy

Criar um fluxo na tabela mytable como existia exatamente na data e hora do carimbo de data/hora especificado:

CREATE STREAM mystream ON TABLE mytable AT (TIMESTAMP => TO_TIMESTAMP_TZ('02/02/2019 01:02:03', 'mm/dd/yyyy hh24:mi:ss'));
Copy

Criar um fluxo na tabela mytable como existia 5 minutos atrás:

CREATE STREAM mystream ON TABLE mytable AT(OFFSET => -60*5);
Copy

Criar um fluxo na tabela mytable com o mesmo offset do fluxo existente oldstream na mesma tabela de origem:

CREATE STREAM mystream ON TABLE mytable AT(STREAM => 'oldstream');
Copy

Recriar o fluxo mystream existente, mas manter seu offset atual:

CREATE OR REPLACE STREAM mystream ON TABLE mytable AT(STREAM => 'mystream');
Copy

Criar um fluxo na tabela mytable incluindo transações até, sem incluir quaisquer alterações feitas pela transação especificada:

CREATE STREAM mystream ON TABLE mytable BEFORE(STATEMENT => '8e5d0ca9-005e-44e6-b858-a8f5b37c5726');
Copy

Criação de um fluxo em uma exibição de tabela única

Criar um fluxo na visualização myview:

CREATE STREAM mystream ON VIEW myview;
Copy

Para exemplos adicionais, consulte Exemplos de fluxos.

Criação de um fluxo apenas para inserção em uma tabela externa

Criar um fluxo de tabela externa e consultar os registros de captura de dados de alteração no fluxo, que rastreiam os registros adicionados aos metadados da tabela externa:

-- Create an external table that points to the MY_EXT_STAGE stage.
-- The external table is partitioned by the date (in YYYY/MM/DD format) in the file path.
CREATE EXTERNAL TABLE my_ext_table (
  date_part date as to_date(substr(metadata$filename, 1, 10), 'YYYY/MM/DD'),
  ts timestamp AS (value:time::timestamp),
  user_id varchar AS (value:userId::varchar),
  color varchar AS (value:color::varchar)
) PARTITION BY (date_part)
  LOCATION=@my_ext_stage
  AUTO_REFRESH = false
  FILE_FORMAT=(TYPE=JSON);

-- Create a stream on the external table
CREATE STREAM my_ext_table_stream ON EXTERNAL TABLE my_ext_table INSERT_ONLY = TRUE;

-- Execute SHOW streams
-- The MODE column indicates that the new stream is an INSERT_ONLY stream
SHOW STREAMS;
+-------------------------------+------------------------+---------------+-------------+--------------+-----------+------------------------------------+-------+-------+-------------+
| created_on                    | name                   | database_name | schema_name | owner        | comment   | table_name                         | type  | stale | mode        |
|-------------------------------+------------------------+---------------+-------------+--------------+-----------+------------------------------------+-------+-------+-------------|
| 2020-08-02 05:13:20.174 -0800 | MY_EXT_TABLE_STREAM    | MYDB          | PUBLIC      | MYROLE       |           | MYDB.PUBLIC.EXTTABLE_S3_PART       | DELTA | false | INSERT_ONLY |
+-------------------------------+------------------------+---------------+-------------+--------------+-----------+------------------------------------+-------+-------+-------------+

-- Add a file named '2020/08/05/1408/log-08051409.json' to the stage using the appropriate tool for the cloud storage service.

-- Manually refresh the external table metadata.
ALTER EXTERNAL TABLE my_ext_table REFRESH;

-- Query the external table stream.
-- The stream indicates that the rows in the added JSON file were recorded in the external table metadata.
SELECT * FROM my_ext_table_stream;
+----------------------------------------+------------+-------------------------+---------+-------+-----------------+-------------------+-----------------+---------------------------------------------+
| VALUE                                  | DATE_PART  | TS                      | USER_ID | COLOR | METADATA$ACTION | METADATA$ISUPDATE | METADATA$ROW_ID | METADATA$FILENAME                           |
|----------------------------------------+------------+-------------------------+---------+-------+-----------------+-------------------+-----------------+---------------------------------------------|
| {                                      | 2020-08-05 | 2020-08-05 15:57:01.000 | user25  | green | INSERT          | False             |                 | test/logs/2020/08/05/1408/log-08051409.json |
|   "color": "green",                    |            |                         |         |       |                 |                   |                 |                                             |
|   "time": "2020-08-05 15:57:01-07:00", |            |                         |         |       |                 |                   |                 |                                             |
|   "userId": "user25"                   |            |                         |         |       |                 |                   |                 |                                             |
| }                                      |            |                         |         |       |                 |                   |                 |                                             |
| {                                      | 2020-08-05 | 2020-08-05 15:58:02.000 | user56  | brown | INSERT          | False             |                 | test/logs/2020/08/05/1408/log-08051409.json |
|   "color": "brown",                    |            |                         |         |       |                 |                   |                 |                                             |
|   "time": "2020-08-05 15:58:02-07:00", |            |                         |         |       |                 |                   |                 |                                             |
|   "userId": "user56"                   |            |                         |         |       |                 |                   |                 |                                             |
| }                                      |            |                         |         |       |                 |                   |                 |                                             |
+----------------------------------------+------------+-------------------------+---------+-------+-----------------+-------------------+-----------------+---------------------------------------------+
Copy

Criação de um fluxo padrão em uma tabela de diretório

Criar um fluxo na tabela de diretório para um estágio chamado mystage:

CREATE STREAM dirtable_mystage_s ON STAGE mystage;
Copy

Atualizar manualmente os metadados da tabela de diretório para preencher o fluxo:

ALTER STAGE mystage REFRESH;
Copy

Consultar o fluxo depois que um ou mais arquivos foram adicionados ao estágio após o offset mais recente do fluxo:

SELECT * FROM dirtable_mystage_s;

+-------------------+--------+-------------------------------+----------------------------------+----------------------------------+-------------------------------------------------------------------------------------------+-----------------+-------------------+-----------------+
| RELATIVE_PATH     | SIZE   | LAST_MODIFIED                 | MD5                              | ETAG                             | FILE_URL                                                                                  | METADATA$ACTION | METADATA$ISUPDATE | METADATA$ROW_ID |
|-------------------+--------+-------------------------------+----------------------------------+----------------------------------+-------------------------------------------------------------------------------------------+-----------------+-------------------+-----------------|
| file1.csv.gz      |   1048 | 2021-05-14 06:09:08.000 -0700 | c98f600c492c39bef249e2fcc7a4b6fe | c98f600c492c39bef249e2fcc7a4b6fe | https://myaccount.snowflakecomputing.com/api/files/MYDB/MYSCHEMA/MYSTAGE/file1%2ecsv%2egz | INSERT          | False             |                 |
| file2.csv.gz      |   3495 | 2021-05-14 06:09:09.000 -0700 | 7f1a4f98ef4c7c42a2974504d11b0e20 | 7f1a4f98ef4c7c42a2974504d11b0e20 | https://myaccount.snowflakecomputing.com/api/files/MYDB/MYSCHEMA/MYSTAGE/file2%2ecsv%2egz | INSERT          | False             |                 |
+-------------------+--------+-------------------------------+----------------------------------+----------------------------------+-------------------------------------------------------------------------------------------+-----------------+-------------------+-----------------+
Copy