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 Tableau | Tipo Snowflake |
|---|---|
string | VARCHAR |
integer | INTEGER |
real | FLOAT |
date | DATE |
datetime | TIMESTAMP |
boolean | BOOLEAN |
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:
- Replique as tabelas de origem no Snowflake (usando replicação Snowflake ou ETL)
- Atualize as referências de tabelas em relation.table, se necessário
- Verifique a compatibilidade de esquemas entre a origem e o Snowflake
Transformadores relacionados
- 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