Pular para o conteúdo principal

ImportStageTransformer

Visão geral​

Converte estágios IMPORT do DataStage (leitores de CSV/arquivos sequenciais) em instruções SQL SELECT. Mapeia caminhos de arquivos para tabelas Snowflake previamente carregadas.

Tipo de estágio: INPUT (operador import com PxSequentialFile) Saída: SQL SELECT da tabela Snowflake mapeada

Para estágios IMPORT que leem arquivos CSV ou sequenciais, recomendamos fortemente:

  1. Ingerir os arquivos no Snowflake usando o módulo de Ingestão da Dadosfera
  2. Mapear o caminho do arquivo para a tabela Snowflake de destino na configuração do mapeamento de entrada
  3. O conversor gerará um SELECT simples da tabela de destino

Essa abordagem garante que os dados já estejam carregados no Snowflake antes da execução do SQL convertido.

Exemplo de fluxo de trabalho​

Original (DataStage):

File: /data/input/sales_data.csv
Schema: ID, NAME, AMOUNT

Recomendado:

  1. Ingerir o arquivo usando o módulo de Ingestão da Dadosfera:

    • Origem: /data/input/sales_data.csv
    • Destino: PUBLIC.SALES_DATA_TABLE
    • Executar o pipeline de ingestão
  2. Configurar o mapeamento de entrada:

    {
    "/data/input/sales_data.csv": "PUBLIC.SALES_DATA_TABLE"
    }
  3. O conversor gera:

    SELECT ID, NAME, AMOUNT FROM PUBLIC.SALES_DATA_TABLE

Recursos​

  • Mapeia caminhos de arquivos CSV/sequenciais para tabelas Snowflake
  • Preserva o esquema de colunas da definição do arquivo
  • Trata arquivos delimitados (CSV, ponto e vírgula, tabulação etc.)
  • Oferece suporte a colunas que aceitam nulos
  • Obtém a lista de colunas do esquema embutido ou de -firstLineColumnNames

Exemplo de estágio DataStage​

Entrada (formato .dsx)​

#### STAGE: ImportFileData
## Operator
import
## Operator options
-schema record
{final_delim=end, record_delim_string='\\r\\n', delim=';', quote=none}
(
REGION_CODE:nullable ustring[max=50];
SEGMENT_CODE:nullable ustring[max=50];
PRODUCT_NAME:nullable ustring[max=255];
VALUE_AMOUNT:nullable ustring[max=255];
STATUS_FLAG:nullable ustring[max=10];
)
-rejects continue
-reportProgress yes
-firstLineColumnNames
-file '[&\"$PathDataFiles\"]/input_data/processed/[&\"file_name\"].csv'

## General options
[ident('ImportFileData'); jobmon_ident('ImportFileData')]
## Outputs
0> [] 'ImportFileData:output.v'

Configuração do mapeamento de entrada​

{
"[&\"$PathDataFiles\"]/input_data/processed/[&\"file_name\"].csv": "PUBLIC.INPUT_DATA_TABLE"
}

SQL gerado​

SELECT
REGION_CODE,
SEGMENT_CODE,
PRODUCT_NAME,
VALUE_AMOUNT,
STATUS_FLAG
FROM PUBLIC.INPUT_DATA_TABLE

Esquema de saída​

[
{"name": "REGION_CODE", "type": "string"},
{"name": "SEGMENT_CODE", "type": "string"},
{"name": "PRODUCT_NAME", "type": "string"},
{"name": "VALUE_AMOUNT", "type": "string"},
{"name": "STATUS_FLAG", "type": "string"}
]

Como funciona​

1. Extrair o caminho do arquivo​

Analisa a opção -file para identificar o arquivo de origem:

-file '[&\"$PathDataFiles\"]/input_data/processed/sales_2024.csv'

2. Localizar a tabela Snowflake​

Usa o mapeamento de entrada para localizar a tabela Snowflake correspondente:

{
"[&\"$PathDataFiles\"]/input_data/processed/sales_2024.csv": "PUBLIC.SALES_2024_TABLE"
}

3. Extrair o esquema​

Lê as definições de colunas do esquema embutido:

-schema record
{final_delim=end, record_delim_string='\\r\\n', delim=';', quote=none}
(
REGION_CODE:nullable ustring[max=50];
SEGMENT_CODE:nullable ustring[max=50];
...
)

4. Gerar a instrução SELECT​

Cria SQL que seleciona as colunas especificadas da tabela mapeada:

SELECT
REGION_CODE,
SEGMENT_CODE,
...
FROM PUBLIC.SALES_2024_TABLE

Opções de arquivo​

Configuração do delimitador​

-schema record
{delim=';'} ← Semicolon delimiter
{delim=','} ← Comma delimiter (CSV)
{delim='\\t'} ← Tab delimiter (TSV)

Delimitador de registros​

{record_delim_string='\\r\\n'}   ← Windows line endings (CRLF)
{record_delim_string='\\n'} ← Unix line endings (LF)

Tratamento de aspas​

{quote='"'}          ← Double quote for text fields
{quote=none} ← No quoting

Opções da primeira linha​

-firstLineColumnNames    ← Skip first row (contains headers)

Sem essa opção, todas as linhas são tratadas como dados.

Mapeamento de tipos de colunas​

Os tipos do DataStage no esquema são convertidos em tipos Snowflake:

Tipo DataStageTipo Snowflake
ustring[max=N]string
string[max=N]string
int32number
int64number
decimal[p,s]number
datedate
timestamptimestamp

Todos os tipos podem ser marcados como nullable.

Exemplos de mapeamento de entrada​

Mapeamento simples de arquivo​

{
"/data/sales.csv": "PUBLIC.SALES_TABLE"
}

Caminho de arquivo parametrizado​

O DataStage costuma usar parâmetros nos caminhos de arquivos:

-file '[&\"$BasePath\"]/input/[&\"region\"]_data.csv'

Faça o mapeamento substituindo os parâmetros por valores reais ou usando correspondência de padrões:

{
"[&\"$BasePath\"]/input/[&\"region\"]_data.csv": "PUBLIC.REGION_DATA_TABLE"
}

Múltiplos arquivos​

{
"/data/sales_2023.csv": "PUBLIC.SALES_2023",
"/data/sales_2024.csv": "PUBLIC.SALES_2024",
"/data/customers.csv": "PUBLIC.CUSTOMERS"
}

Tratamento de rejeições​

-rejects continue

Opção do DataStage para continuar o processamento ao encontrar registros malformados. No Snowflake, isso é tratado durante a fase de ingestão (não na conversão SQL).

Limitações​

  • ⚠️ Exige mapeamento de entrada - Os caminhos dos arquivos devem ser mapeados para tabelas Snowflake; não há leitura automática de arquivos em SQL
  • ⚠️ Ingestão prévia obrigatória - Os arquivos devem ser carregados no Snowflake usando o módulo de Ingestão da Dadosfera antes da execução do SQL
  • ⚠️ Resolução de parâmetros - Os parâmetros de jobs DataStage nos caminhos dos arquivos devem ser resolvidos ou mapeados adequadamente
  • ⚠️ Sem conversão de formato de arquivo - A análise de CSV, o tratamento de delimitadores e as conversões de tipos de dados devem ser feitos durante a ingestão, não em SQL
  • ⚠️ Registros rejeitados - O tratamento de registros malformados deve ser configurado no pipeline de ingestão

Boas práticas​

Quando usar o transformador IMPORT​

  • ✅ Leituras simples de arquivos com esquema predefinido
  • ✅ Arquivos já ingeridos em tabelas Snowflake
  • ✅ Mapeamentos diretos de colunas (1:1 do arquivo para a tabela)

Ingestão prévia com a Dadosfera​

Sempre use o módulo de Ingestão da Dadosfera para:

  1. Carregar arquivos CSV/sequenciais em tabelas Snowflake
  2. Tratar o mapeamento de esquema e as conversões de tipos de dados
  3. Configurar o tratamento de erros para registros malformados
  4. Configurar cargas incrementais, se necessário

Em seguida, configure input_mapping para apontar para as tabelas ingeridas.

  • InputStageTransformer - Para entradas de bancos de dados Oracle (não arquivos)
  • CopyStageTransformer - Para leitura de conjuntos de dados DataStage (não arquivos)
  • ModifyStageTransformer - Para filtragem/renomeação de colunas após a importação