Conexões do Snowflake - AWS Glue

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conexões do Snowflake

Você pode usar o AWS Glue para Spark para ler e gravar em tabelas no Snowflake no AWS Glue 4.0 e versões posteriores. Você pode ler no Snowflake com uma consulta SQL. Você pode se conectar ao Snowflake usando um usuário e uma senha. Você pode consultar as credenciais do Snowflake armazenadas no AWS Secrets Manager por meio do catálogo de dados do AWS Glue . As credenciais do Snowflake do catálogo de dados do AWS Glue para Spark são armazenadas separadamente das credenciais do Snowflake do catálogo de dados para crawlers. Você deve escolher um tipo de conexão do SNOWFLAKE e não um tipo de conexão JDBC configurada para se conectar ao Snowflake.

Para obter mais informações sobre o Snowflake, consulte o site do Snowflake. Para obter mais informações sobre o Snowflake na AWS, consulte Snowflake Data Warehouse na Amazon Web Services.

Configurar conexões do Snowflake

Não há pré-requisitos da AWS para se conectar aos fluxos do Snowflake disponíveis pela Internet.

Opcionalmente, você pode realizar a seguinte configuração para gerenciar suas credenciais de conexão com o AWS Glue.

Para gerenciar suas credenciais de conexão com AWS o Glue
  1. No Snowflake, gere um usuário, SnowflakeUser e senha, snowflakePassword.

  2. Nos AWS Secrets Manager, crie um segredo usando suas credenciais do Snowflake. Para criar um segredo no Secrets Manager, siga o tutorial disponível em Criação de um segredo do AWS Secrets Manager na documentação do AWS Secrets Manager. Depois de criar o segredo, guarde o nome secreto, SecretName, para a próxima etapa.

    • Ao selecionar pares de chave/valor, crie um par para snowflakeUser com a chave sfUser.

    • Ao selecionar pares de chave/valor, crie um par para snowflakePassword com a chave sfPassword.

    • Ao selecionar pares de chave/valor, você pode fornecer a chave ao seu armazém do Snowflake sfWarehouse.

  3. No catálogo de dados do AWS Glue, crie uma conexão seguindo as etapas em Adicionar uma conexão do AWS Glue. Depois de criar a conexão, guarde o nome da conexão, connectionName, para a próxima etapa.

    • Ao selecionar um Tipo de conexão, selecione Snowflake.

    • Ao selecionar a URL do Snowflake, forneça a URL da sua instância do Snowflake. A URL usará um nome de host no formulário account_identifier.snowflakecomputing.com.

    • Ao selecionar um Segredo da AWS, forneça o secretName.

  4. Na configuração do trabalho do AWS Glue, forneça connectionName como uma conexão de rede adicional.

Nas seguintes situações, você pode precisar do seguinte:

  • Para Snowflake hospedado na AWS em uma Amazon VPC

    • Você precisará da configuração apropriada da Amazon VPC para o Snowflake. Para obter mais informações sobre como configurar a Amazon VPC, consulte AWS PrivateLink & Snowflake na documentação do Snowflake.

    • Você precisará da configuração apropriada da Amazon VPC para o AWS Glue. AWS Glue e endpoint da VPC de interface (AWS PrivateLink).

    • Você precisará criar uma conexão do catálogo de dados do AWS Glue que forneça informações de conexão do Amazon VPC (além da identificação de um AWS Secrets Manager segredo que define suas credenciais de segurança do Snowflake). A URL mudará quando o AWS PrivateLink estiver sendo usado, conforme descrito na documentação do Snowflake associada a um item anterior.

    • Você precisará que a configuração do trabalho inclua a conexão do catálogo de dados como uma Conexão de rede adicional.

Ler das tabelas do Snowflake

Pré-requisitos: uma tabela do Snowflake que você gostaria de ler. Você precisará do nome da tabela Snowflake, tableName. Você precisará da URL do Snowflake, snowflakeUrl, do nome de usuário snowflakeUser e da senha snowflakePassword. Se o usuário do Snowflake não tiver um namespace padrão definido, você precisará do nome do banco de dados do Snowflake databaseName e do nome do esquema schemaName. Além disso, se o usuário do Snowflake não tiver um armazém padrão definido, você precisará de um nome de armazém warehouseName.

Por exemplo:

Pré-requisitos adicionais: conclua as etapas de Para gerenciar suas credenciais de conexão com o AWS Glue para configurar snowflakeURL, snowflakeUsername e snowflakePassword. Para revisar essas etapas, consulte Configurar conexões do Snowflake na seção anterior. Para selecionar com qual conexão de rede adicional se conectar, usaremos o parâmetro connectionName.

snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Além disso, você pode usar os parâmetros autopushdown e query para ler uma parte de uma tabela do Snowflake. Isso pode ser substancialmente mais eficiente do que filtrar os resultados depois de serem carregados no Spark. Considere um exemplo em que todas as vendas são armazenadas na mesma tabela, mas você só precisa analisar as vendas de uma determinada loja nos feriados. Se essas informações estiverem armazenadas na tabela, você poderá usar pushdown de predicado para recuperar os resultados da seguinte forma:

snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Gravar em tabelas do Snowflake

Pré-requisitos: um banco de dados do Snowflake no qual você deseja gravar. Você precisará de um nome de tabela atual ou desejado, tableName. Você precisará da URL do Snowflake, snowflakeUrl, do nome de usuário snowflakeUser e da senha snowflakePassword. Se o usuário do Snowflake não tiver um namespace padrão definido, você precisará do nome do banco de dados do Snowflake databaseName e do nome do esquema schemaName. Além disso, se o usuário do Snowflake não tiver um armazém padrão definido, você precisará de um nome de armazém warehouseName.

Por exemplo:

Pré-requisitos adicionais: conclua as etapas de Para gerenciar suas credenciais de conexão com o AWS Glue para configurar snowflakeURL, snowflakeUsername e snowflakePassword. Para revisar essas etapas, consulte Configurar conexões do Snowflake na seção anterior. Para selecionar com qual conexão de rede adicional se conectar, usaremos o parâmetro connectionName.

glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )

Referência de opções de conexão do Snowflake

O tipo de conexão do Snowflake usa as seguintes opções de conexão:

Você pode recuperar alguns dos parâmetros desta seção de uma conexão do catálogo de dados (sfUrl, sfUser, sfPassword) e, nesse caso, não será necessário fornecê-los. É possível fazer isso fornecendo o parâmetro connectionName.

Você pode recuperar alguns dos parâmetros desta seção de um segredo dos AWS Secrets Manager (sfUser, sfPassword) e, nesse caso, não será necessário fornecê-los. O segredo deve fornecer o conteúdo protegido com as chaves sfUser e sfPassword. É possível fazer isso fornecendo o parâmetro secretId.

Os parâmetros a seguir geralmente são usados ao se conectar com o Snowflake.

  • sfDatabase: obrigatório se o padrão do usuário não estiver definido no Snowflake. Usado para leitura/gravação. O banco de dados a ser usado na sessão após a conexão.

  • sfSchema: obrigatório se o padrão do usuário não estiver definido no Snowflake. Usado para leitura/gravação. O esquema a ser usado na sessão após a conexão.

  • sfWarehouse: obrigatório se o padrão do usuário não estiver definido no Snowflake. Usado para leitura/gravação. O armazém virtual padrão a ser usado na sessão após a conexão.

  • sfRole: obrigatório se o padrão do usuário não estiver definido no Snowflake. Usado para leitura/gravação. O perfil de segurança padrão a ser usado na sessão após a conexão.

  • sfUrl: (obrigatório) usado para leitura/gravação. Especifica o nome do host da sua conta no seguinte formato: account_identifier.snowflakecomputing.com. Para obter mais informações sobre identificadores de conta, consulte Account Identifiers na documentação do Snowflake.

  • sfUser: (obrigatório) usado para leitura/gravação. Nome de login do usuário do Snowflake.

  • sfPassword: (obrigatório, exceto se pem_private_key for fornecido) usado para leitura/gravação. Senha do usuário do Snowflake.

  • dbtable: obrigatório ao trabalhar com tabelas completas. Usado para leitura/gravação. O nome da tabela a ser lida ou da tabela na qual os dados serão gravados. Durante a leitura, todas as colunas e registros são recuperados.

  • pem_private_key: usado para leitura/gravação. Uma string de chave privada codificada em b64 não criptografada. A chave privada do usuário do Snowflake. É comum copiá-la de um arquivo PEM. Para obter mais informações, consulte Autenticação e rotação de pares de chaves na documentação do Snowflake.

  • query: obrigatório ao ler com uma consulta. Usado para leitura. A consulta exata (instrução SELECT) a ser executada

As opções a seguir são usadas para configurar comportamentos específicos durante o processo de conexão com o Snowflake.

  • preactions: usado para leitura/gravação. Valores válidos: lista separada por ponto e vírgula de instruções SQL como string. As instruções SQL são executadas antes que os dados sejam transferidos entre o AWS Glue e o Snowflake. Se uma instrução contiver %s, %s será substituído pelo nome da tabela referenciada para a operação.

  • postactions: usado para leitura/gravação. As instruções SQL são executadas após os dados serem transferidos entre o AWS Glue e o Snowflake. Se uma instrução contiver %s, %s será substituído pelo nome da tabela referenciada para a operação.

  • autopushdown: padrão: "on". Valores válidos: "on", "off". Esse parâmetro controla se o pushdown automática de consultas está habilitado. Se o pushdown estiver habilitado, quando uma consulta for executada no Spark, se for possível fazer pushdown de parte da consulta para o servidor do Snowflake, isso ocorrerá. Isso melhora a performance de algumas consultas. Para obter informações sobre se é possível fazer pushdown da consulta, consulte Pushdown na documentação do Snowflake.

Além disso, algumas das opções disponíveis no conector do Snowflake Spark podem ser compatíveis com o AWS Glue. Para obter mais informações sobre as opções disponíveis no conector do Snowflake Spark, consulte Setting Configuration Options for the Connector no Snowflake.

Limitações do conector do Snowflake

A conexão com o Snowflake com o AWS Glue para Spark está sujeita às limitações a seguir.

  • Esse conector não é compatível com marcadores de trabalho. Para obter mais informações sobre marcadores de trabalho, consulte Rastrear dados processados usando marcadores de trabalho.

  • Esse conector não é compatível com leituras e gravações do Snowflake por meio de tabelas no catálogo de dados do AWS Glue usando os métodos create_dynamic_frame.from_catalog e write_dynamic_frame.from_catalog.

  • Esse conector não é compatível com a conexão com o Snowflake usando outras credenciais que não sejam usuário e senha.

  • Esse conector não é compatível com trabalhos de streaming.

  • Esse conector é compatível com consultas baseadas em instrução SELECT ao recuperar informações (como com o parâmetro query). Outros tipos de consultas (como SHOW, DESC ou instruções DML) não são compatíveis.

  • O Snowflake limita o tamanho do texto da consulta (ou seja, instruções SQL) enviado pelos clientes do Snowflake a 1 MB por instrução. Para obter mais detalhes, consulte Limits on Query Text Size.