View a markdown version of this page

Conexões do Snowflake - AWS Glue

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 dos três métodos: autenticação básica (com nome de usuário e senha), autenticação OAuth ou autenticação por par de chaves. Você pode consultar as credenciais do Snowflake armazenadas no AWS Secrets Manager por meio das conexões de dados do AWS Glue. As credenciais de conexão de dados 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 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.

    • Para autenticação OAuth:

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

      • Ao selecionar Pares chave/valor, crie um par para OAUTH_CLIENT_SECRET com a chave USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET

    • Para autenticação por par de chaves:

      • 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 chave privada com a chave pem_private_key

    • Para autenticação básica:

      • Ao selecionar Pares de chave/valor, crie um par para snowflakeUser com a chave USERNAME

      • Ao selecionar Pares de chave/valor, crie um par para snowflakePassword com a chave PASSWORD

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

    • Ao selecionar pares de chave/valor, você pode fornecer propriedades adicionais de conexão do Snowflake usando os nomes de propriedades correspondentes do Spark como chaves. As propriedades compatíveis incluem:

      • sfDatabase: nome do banco de dados do Snowflake

      • sfSchema: nome do esquema do Snowflake

      • sfRole: nome da tabela do Snowflake

  2. No console do AWS Glue Studio, crie uma conexão selecionando Conexões de dados e depois Criar conexão. Acompanhe as etapas do assistente de conexão para concluir o processo:

    • Ao selecionar uma Fonte de dados, escolha Snowflake e depois Avançar.

    • Insira os detalhes da conexão, como o host e a porta. Ao inserir o URL do Snowflake do host, forneça o URL da sua instância do Snowflake. Em geral, o URL usará um nome de host no formato account_identifier.snowflakecomputing.com. Porém, o formato do URL pode variar dependendo do tipo de conta do Snowflake (como AWS, Azure ou hospedada no Snowflake).

    • Ao selecionar o perfil de serviço do IAM, escolha no menu suspenso. Esse é o perfil do IAM da sua conta que será usado para acessar o AWS Secrets Manager e atribuir o IP se a VPC for especificada.

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

  3. Na etapa seguinte do assistente, defina as propriedades da conexão do Snowflake.

  4. Na etapa final do assistente, reveja as configurações e conclua o processo para criar a conexão.

Para o Snowflake hospedado no AWS em uma Amazon VPC, você pode precisar do seguinte:

  • 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. Configurar VPC endpoints de interface (AWS PrivateLink) para AWS Glue (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. 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. Para selecionar com qual conexão de rede adicional se conectar, o parâmetro connectionName será usado.

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. 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. Para selecionar com qual conexão de rede adicional se conectar, o parâmetro connectionName será usado.

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 AWS Glue (sfUrl, sfUser, sfPassword) e, nesse caso, não será necessário fornecê-los. É possível fazer isso fornecendo o parâmetro connectionName.

É possível recuperar parâmetros de conexão dos segredos do AWS Secrets Manager usando o parâmetro secretId. Ao usar o Secrets Manager, as seguintes propriedades do Spark poderão ser recuperadas automaticamente se estiverem presentes no segredo:

  • sfUser (usando a chave USERNAME ou sfUser)

  • sfPassword (usando a chave PASSWORD ou sfPassword, ao usar a autenticação básica)

  • sfWarehouse (usando a chave sfWarehouse)

  • sfDatabase (usando a chave sfDatabase)

  • sfSchema (usando a chave sfSchema)

  • sfRole (usando a chave sfRole)

  • pem_private_key (usando a chave pem_private_key, ao usar a autenticação por par de chaves)

  • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET (ao usar a autenticação OAuth)

Ordem de precedência da propriedade: quando a mesma propriedade é especificada em vários locais, o AWS Glue usa a seguinte ordem de precedência (da maior para a menor):

  1. Opções de conexão fornecidas explicitamente em seu código de trabalho

  2. Propriedades de conexão do Glue

  3. Valores de segredos do AWS Secrets Manager (quando secretId é especificado)

  4. Padrões de usuário do Snowflake

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 na autenticação básica) 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: (obrigatório na autenticação por par de chaves) 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.

  • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET: (obrigatório na autenticação OAuth) usado para operações de leitura e gravação. Esse valor corresponde ao OAUTH_CLIENT_SECRET, que pode ser obtido na integração de segurança do Snowflake configurada para habilitar a autenticação baseada em OAuth para a conta. Para obter mais detalhes, consulte a documentação de configuração da integração de segurança do OAuth para Snowflake: Configurar o OAuth para Snowflake para clientes personalizados.

  • 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.

Métodos de autenticação do Snowflake

O AWS Glue é compatível com os seguintes métodos de autenticação para conexão ao Snowflake:

  • Autenticação básica: forneça os parâmetros sfUser e sfPassword.

  • Autenticação por par de chaves: forneça os parâmetros sfUser e pem_private_key. Quando a autenticação por par de chaves é usada, o parâmetro sfPassword não é necessário.

  • Autenticação OAuth: o Conector do Snowflake é compatível com o tipo de concessão AUTHORIZATION_CODE para solicitar acesso aos seus dados do Snowflake. Esse tipo de concessão é chamado de “OAuth de 3 pernas”, pois envolve o redirecionamento dos usuários para um servidor de autorização de terceiros, onde eles podem autenticar e aprovar o acesso. Esse método é usado ao criar uma conexão por meio do Console do AWS Glue.

    • Pré-requisito: para usar esse método de autenticação, verifique se a configuração a seguir está concluída:

      • Configure o OAuth para Snowflake para um cliente personalizado seguindo a documentação oficial do Snowflake: Configurar o OAuth para Snowflake para clientes personalizados.

      • Defina o URI de redirecionamento correto ao criar a integração de segurança do Snowflake. Por exemplo: se você estiver criando a conexão na região DUB (eu-west-1), seu URI de redirecionamento deverá ser: https://eu-west-1.console.aws.amazon.com/gluestudio/oauth

      • Depois de criar a integração de segurança, guarde as seguintes informações para uso ao criar a conexão do Glue:

        • OAUTH_CLIENT_ID: esse valor deve ser fornecido como ID do cliente do aplicativo cliente gerenciado pelo usuário na página de criação da conexão do Glue.

        • OAUTH_CLIENT_SECRET: esse valor deve ser armazenado no segredo AWS usado para a conexão, sob a chave USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET.

    • Escopos do OAuth (opcional): define as permissões específicas ou os níveis de acesso solicitados da conta do Snowflake. Por exemplo, um escopo pode limitar o acesso a um determinado recurso ou operação.

      • Esse valor pode ser especificado no seguinte formato: session:role:Snowflake_Role_Name

      • Exemplo: session:role:ANALYST_ROLE

    • URL do código de autorização (obrigatório): o endpoint ao qual o usuário é redirecionado para fazer login e conceder autorização.

      • Exemplo: https://host/oauth/authorize

    • URL do token de autorização (obrigatório): o endpoint usado para trocar o código de autorização por um token de acesso.

      • Exemplo: https://host/oauth/token-request

    • ID do cliente do aplicativo cliente gerenciado pelo usuário (obrigatório): o identificador exclusivo do seu aplicativo cliente OAuth registrado no Snowflake

    • Segredo AWS (obrigatório): refere-se a um segredo do AWS Secrets Manager contendo os seguintes pares de valores-chave:

      • sfUser: o nome de usuário do Snowflake

      • USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET: o segredo do cliente associado ao aplicativo cliente OAuth

Os três métodos de autenticação são totalmente aceitos e podem ser configurados por meio de qualquer combinação de opções de conexão, conexões do Glue ou segredos do AWS Secrets Manager.

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 é compatível com autenticação básica, autenticação por par de chaves e autenticação OAuth. Não há suporte a outros métodos de autenticação (como SAML) no momento.

  • 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.