Pular para o conteúdo

Conectar um data warehouse Snowflake

Este guia mostra como conectar uma conta Snowflake ao Saiku Cloud. Dez minutos se você se sente confortável no console do Snowflake; trinta se também precisar configurar auth por par de chaves RSA (recomendado para service accounts).

Impacto no tier: todos os tiers do Saiku Cloud suportam BYOC do Snowflake. Clientes no formato Snowflake geralmente caem no [Team] ou [Business] (pod de engine dedicado), mas o [Starter] funciona também.

Driver: o Saiku Cloud traz o driver JDBC oficial do Snowflake (Apache 2.0). O driver tem ~100 MB porque o protocolo de transporte do Snowflake é Apache Arrow-nativo; o empacotamento do Arrow é não negociável.

O que você vai precisar

  • Uma conta Snowflake (contas trial em signup.snowflake.com — 30 dias grátis, $400 em créditos).
  • Acesso admin para criar uma role + usuário, OU as credenciais de uma role somente leitura existente.
  • O identificador de conta do Snowflake — <orgname>-<accountname> ou o formato legado <accountname>.<region>.<cloud>.

Passo 1 — Allowlist do nosso IP de egress (se a sua conta tem network policy habilitada)

Todas as consultas do Saiku Cloud para o seu data warehouse saem de 87.99.153.244.

Contas Snowflake criadas em 2024+ têm network policy habilitada por default — uma allowlist de IPs autorizados a autenticar. Se a sua conta não tem uma policy, pule este passo; o Snowflake aceita conexões de qualquer IP por default.

Para adicionar o IP do Saiku Cloud:

-- As ACCOUNTADMIN:
CREATE NETWORK POLICY saiku_cloud_allow
ALLOWED_IP_LIST = ('87.99.153.244');
-- Apply to your service user (or to the account, depending on shape):
ALTER USER saiku_read SET NETWORK_POLICY = saiku_cloud_allow;

Se você já tem uma network policy existente com outros IPs, adicione 87.99.153.244 à lista existente em vez de substituí-la.

Passo 2 — Crie uma role + usuário somente leitura

Modelo de role do Snowflake: um usuário tem uma role default; a role tem grants. O Saiku Cloud precisa de SELECT nas tabelas que vai ler.

-- As ACCOUNTADMIN:
CREATE ROLE saiku_reader;
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE saiku_reader;
GRANT USAGE ON DATABASE ANALYTICS TO ROLE saiku_reader;
GRANT USAGE ON SCHEMA ANALYTICS.PUBLIC TO ROLE saiku_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA ANALYTICS.PUBLIC TO ROLE saiku_reader;
GRANT SELECT ON FUTURE TABLES IN SCHEMA ANALYTICS.PUBLIC TO ROLE saiku_reader;
CREATE USER saiku_read
PASSWORD = 'pick-something-strong'
DEFAULT_ROLE = saiku_reader
DEFAULT_WAREHOUSE = COMPUTE_WH;
GRANT ROLE saiku_reader TO USER saiku_read;

Ajuste ANALYTICS / PUBLIC / COMPUTE_WH para a sua conta.

Auth por par de chaves RSA (recomendado para produção)

Para service accounts, a auth por senha está sendo descontinuada em algumas regiões do Snowflake. O substituto é par de chaves RSA:

Terminal window
# Generate a 2048-bit RSA private key
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

Envie a chave pública para o usuário:

ALTER USER saiku_read SET RSA_PUBLIC_KEY = 'MIIBIjANBgkqhkiG9w0BAQEFA...';

Na URL JDBC, aponte para o caminho do arquivo de chave privada (o container do engine precisa de acesso de leitura — para o engine compartilhado do Saiku Cloud, cole o conteúdo da chave inline via private_key_file_pwd).

Passo 3 — Monte a URL JDBC

O formato:

jdbc:snowflake://<account>.snowflakecomputing.com/?db=<DATABASE>&warehouse=<WAREHOUSE>&role=<ROLE>

Concreto:

jdbc:snowflake://abc12345.us-east-1.aws.snowflakecomputing.com/?db=ANALYTICS&warehouse=COMPUTE_WH&role=SAIKU_READER

Ou com o identificador mais novo <orgname>-<accountname>:

jdbc:snowflake://yourorg-yourdb.snowflakecomputing.com/?db=ANALYTICS&warehouse=COMPUTE_WH&role=SAIKU_READER

Parâmetros chave:

  • db= — o nome do banco. Obrigatório (senão o Snowflake roteia as queries para o default do usuário, que geralmente é errado).
  • warehouse= — o warehouse de compute. Obrigatório.
  • role= — a role a ser assumida. Bata com o que você concedeu no passo 2.
  • TLS está sempre ativo no Snowflake — sem parâmetro SSL para definir.

Passo 4 — Conecte pelo wizard do Saiku Cloud

  1. Faça login em https://cloud.saiku.bi/.

  2. Vá em Conexões na barra lateral esquerda.

  3. Em 1. Escolha o tipo de data warehouse, clique no tile Snowflake.

  4. Preencha:

    • URL JDBC — a URL do passo 3.
    • Usuáriosaiku_read (ou o seu usuário de service account).
    • Senha — a senha do passo 2.
  5. Clique em Testar conexão.

Espere um banner verde de resultado: ✓ Connection successful mais a versão detectada do Snowflake. A primeira conexão do Snowflake leva 5–15 segundos (auth + warehouse-spinup se estava pausado); testes seguintes são mais rápidos.

Passo 5 — Salve a conexão

Mesmo formato dos outros dialetos — digite a senha de novo, dê um rótulo, salve.

Solução de problemas

✗ Connection failed (HOST_UNREACHABLE) ou (TIMEOUT)

  • Identificador de conta errado — a parte antes de .snowflakecomputing.com é o identificador inteiro. abc12345.us-east-1.aws é um identificador; abc12345 sozinho não resolve. Os docs do Snowflake são confusos aqui; copie o identificador da página de detalhes da conta no console do Snowflake.
  • Network policy — se a sua conta tem network policy e o IP do Saiku Cloud não está na allowlist, o Snowflake silenciosamente dá timeout na conexão. Adicione 87.99.153.244 conforme o passo 1.

✗ Connection failed (AUTH_FAILED)

Erro Snowflake 390100 / 390101 / 28000.

  • Case do usuário — usuários do Snowflake são armazenados em UPPERCASE por default. Digite saiku_read e ele é armazenado como SAIKU_READ. A camada JDBC é case-insensitive na consulta, então isso geralmente não morde — mas se você envolveu o usuário em aspas duplas ao criar, o case é preservado + precisa bater exatamente.
  • MFA — se MFA está habilitado no usuário, auth por senha vai falhar. Ou desabilite MFA para o usuário de serviço ou use auth por par de chaves RSA (seção RSA do passo 2).
  • Role não existe — se role= na URL nomeia uma role que o usuário não pode assumir, o Snowflake retorna auth-failed em vez de um erro mais específico. Verifique com SHOW GRANTS TO USER saiku_read; no console.

✗ Connection failed (DATABASE_NOT_FOUND)

O banco na URL não existe OU a role não tem USAGE nele. GRANT USAGE ON DATABASE ANALYTICS TO ROLE saiku_reader; corrige o último; o primeiro precisa do nome do banco corrigido.

A conexão funciona mas os cubos não renderizam

USAGE no banco não basta — o Saiku também precisa de USAGE no schema e SELECT nas tabelas. A cadeia completa de grants está no passo 2. Um erro comum é conceder USAGE no banco mas esquecer USAGE no schema.

Qualquer outra coisa

Tire um screenshot do wizard com o banner vermelho de resultado visível (especificamente a linha Kind: ...) e mande para support@saiku.bi.

Para clientes Enterprise, o endpoint AWS PrivateLink do Snowflake pode substituir o caminho de rede pública inteiramente. A URL JDBC muda para um formato <account>.privatelink.snowflakecomputing.com; a allowlist de IP se torna irrelevante. Entre em contato com seu account team para provisionar o peering.

Teste com FoodMart

Quer testar o Saiku Cloud com esse dialeto antes de conectar seus próprios dados? Baixe o dataset de exemplo FoodMart empacotado para Snowflake:

Dataset de exemplo FoodMart para Snowflake