Pular para o conteúdo principal

LoadSqlProxyTransformer

Visão geral​

Converte nós LoadSqlProxy do Tableau em instruções SQL SELECT. Mapeia origens de tabelas de bancos de dados para tabelas Snowflake com transformações opcionais de campos.

Tipo de nó: .v1.LoadSqlProxy Saída: SQL SELECT com transformações de campos

Recursos​

  • Leitura de tabelas de bancos de dados (Oracle, SQL Server, PostgreSQL etc.)
  • Preservação do esquema de colunas da definição da tabela
  • Suporte à renomeação de colunas (ação RenameColumn)
  • Suporte à remoção de colunas (ação RemoveColumns)
  • Suporte à conversão de tipos (ação ChangeColumnType)
  • Normalização de nomes de campos (espaços para sublinhados, letras minúsculas)
  • Tratamento de grandes listas de campos (mais de 100 colunas)

Exemplo de nó Tableau​

Entrada (formato Tableau)​

{
"id": "a7b3c9d2-ef45-4b89-9a12-c3d4e5f6a7b8",
"name": "Sales Database",
"node_type": ".v1.LoadSqlProxy",
"base_type": "input",
"relation": {
"type": "table",
"table": "[ANALYTICS].[DBO].[SALES_DATA_TABLE]"
},
"fields": [
{
"name": "Region Code",
"type": "string",
"ordinal": 0
},
{
"name": "Sales Rep ID",
"type": "integer",
"ordinal": 1
},
{
"name": "Customer Number",
"type": "integer",
"ordinal": 2
},
{
"name": "Product Code",
"type": "string",
"ordinal": 3
},
{
"name": "Order Date",
"type": "date",
"ordinal": 4
},
{
"name": "Invoice Amount",
"type": "real",
"ordinal": 5
},
{
"name": "Units Sold",
"type": "integer",
"ordinal": 6
},
{
"name": "Division Name",
"type": "string",
"ordinal": 7
},
{
"name": "Sales Amount Local",
"type": "real",
"ordinal": 8
},
{
"name": "Sales Amount USD",
"type": "real",
"ordinal": 9
},
{
"name": "Material Number",
"type": "string",
"ordinal": 10
},
{
"name": "Order Type Code",
"type": "string",
"ordinal": 11
}
],
"actions": []
}

SQL gerado​

SELECT region_code,
sales_rep_id,
customer_number,
product_code,
order_date,
invoice_amount,
units_sold,
division_name,
sales_amount_local,
sales_amount_usd,
material_number,
order_type_code
FROM ANALYTICS.DBO.SALES_DATA_TABLE

Esquema de saída​

{
"region_code": "string",
"sales_rep_id": "integer",
"customer_number": "integer",
"product_code": "string",
"order_date": "date",
"invoice_amount": "real",
"units_sold": "integer",
"division_name": "string",
"sales_amount_local": "real",
"sales_amount_usd": "real",
"material_number": "string",
"order_type_code": "string"
}

Como funciona​

1. Resolver o nome da tabela​

Extrai o nome da tabela do objeto relation:

{
"relation": {
"type": "table",
"table": "[ANALYTICS].[DBO].[SALES_DATA_TABLE]"
}
}

Converte em: ANALYTICS.DBO.SALES_DATA_TABLE

2. Extrair o esquema de campos​

Lê as definições de colunas de node.fields:

{
"name": "Region Code",
"type": "string",
"ordinal": 0
}

3. Aplicar ações (se houver)​

Processa as ações em ordem:

  • RenameColumn: Renomeia colunas no SELECT
  • RemoveColumns: Exclui colunas do SELECT
  • ChangeColumnType: Adiciona expressões CAST

4. Normalizar os nomes dos campos​

Converte nomes de campos Tableau em identificadores SQL:

  • Espaços → sublinhados
  • Letras minúsculas
  • Remoção de caracteres especiais
"Sales Amount USD" → sales_amount_usd
"Region Code" → region_code

5. Gerar a instrução SELECT​

Cria SQL que seleciona colunas da tabela de origem:

SELECT <sanitized_columns>
FROM <source_table>

Suporte a ações​

Ação RenameColumn​

Entrada​

{
"actions": [
{
"actionType": ".v1.RenameColumn",
"columnName": "Sales Amount USD",
"newColumnName": "Total Sales USD"
}
]
}

SQL gerado​

SELECT region_code,
sales_amount_usd AS total_sales_usd,
order_date
FROM ANALYTICS.DBO.SALES_DATA_TABLE

Ação RemoveColumns​

Entrada​

{
"actions": [
{
"actionType": ".v1.RemoveColumns",
"columnNames": ["Material Number", "Order Type Code"]
}
]
}

SQL gerado​

SELECT region_code,
sales_rep_id,
customer_number,
product_code,
order_date,
invoice_amount,
units_sold,
division_name,
sales_amount_local,
sales_amount_usd
FROM ANALYTICS.DBO.SALES_DATA_TABLE

Ação ChangeColumnType​

Entrada​

{
"actions": [
{
"actionType": ".v1.ChangeColumnType",
"fields": {
"Invoice Amount": {
"type": "integer"
}
}
}
]
}

SQL gerado​

SELECT region_code,
sales_rep_id,
CAST(invoice_amount AS INTEGER) AS invoice_amount,
order_date
FROM ANALYTICS.DBO.SALES_DATA_TABLE

Mapeamento de tipos de campos​

Tipo TableauTipo Snowflake
stringVARCHAR
integerINTEGER
realFLOAT
dateDATE
datetimeTIMESTAMP
booleanBOOLEAN

Resolução de nomes de tabelas​

Nome simples de tabela​

{
"relation": {
"type": "table",
"table": "SALES_DATA"
}
}

Converte em: SALES_DATA

Formato Schema.Table​

{
"relation": {
"type": "table",
"table": "[ANALYTICS].[SALES_DATA]"
}
}

Converte em: ANALYTICS.SALES_DATA

Formato Database.Schema.Table​

{
"relation": {
"type": "table",
"table": "[ANALYTICS].[DBO].[SALES_DATA_TABLE]"
}
}

Converte em: ANALYTICS.DBO.SALES_DATA_TABLE

Tratamento de grandes listas de campos​

LoadSqlProxy pode tratar centenas de campos de forma eficiente:

  • Exemplo com 574 campos: O transformador processa listas extensas de campos de sistemas legados
  • Remoção seletiva de colunas: Use a ação RemoveColumns para manter apenas os campos necessários
  • Renomeações em lote: Aplique múltiplas ações RenameColumn para padronização

Limitações​

  • ⚠️ SQL específico do banco não convertido - Recursos avançados de bancos de dados (procedimentos armazenados, funções) devem ser reescritos manualmente para Snowflake
  • ⚠️ SQL personalizado não suportado - Apenas origens baseadas em tabelas; consultas SQL personalizadas em relation não são totalmente convertidas
  • ⚠️ Apenas ações suportadas - Apenas as ações RenameColumn, RemoveColumns e ChangeColumnType são suportadas

Boas práticas​

Quando usar o transformador LoadSqlProxy​

  • ✅ Leituras de tabelas de bancos de dados com esquema predefinido
  • ✅ Instruções SELECT simples de tabelas individuais
  • ✅ Filtragem e renomeação de campos de grandes tabelas de origem

Migração do banco de dados de origem​

Ao migrar de bancos de dados de origem para Snowflake:

  1. Replique as tabelas de origem no Snowflake (usando replicação Snowflake ou ETL)
  2. Atualize as referências de tabelas em relation.table, se necessário
  3. Verifique a compatibilidade de esquemas entre a origem e o Snowflake
  • LoadExcelTransformer - Para entradas de arquivos Excel (não tabelas de bancos de dados)
  • ContainerTransformer - Para transformações após a carga
  • UnionTransformer - Para combinar múltiplas origens de bancos de dados