Outras opções de configuração - Amazon Redshift

Outras opções de configuração

Nesta página, você encontra descrições sobre as opções que podem ser especificadas para o conector Amazon Redshift Spark.

Tamanho máximo das colunas de string

O Redshift cria colunas de string como colunas de texto ao criar tabelas, que são armazenadas como VARCHAR(256). Se você quiser colunas que ofereçam suporte a tamanhos maiores, poderá usar maxlength para especificar o comprimento máximo das colunas de string. Veja a seguir um exemplo de como especificar maxlength.

columnLengthMap.foreach { case (colName, length) => val metadata = new MetadataBuilder().putLong("maxlength", length).build() df = df.withColumn(colName, df(colName).as(colName, metadata)) }

Tipo de coluna

Para definir um tipo de coluna, use o campo redshift_type.

columnTypeMap.foreach { case (colName, colType) => val metadata = new MetadataBuilder().putString("redshift_type", colType).build() df = df.withColumn(colName, df(colName).as(colName, metadata)) }

Codificação de compactação de uma coluna

Para usar uma codificação de compressão específica em uma coluna, use o campo de codificação. Para obter uma lista completa das codificações de compressão compatíveis, consulte Codificações de compressão.

Descrição de uma coluna

Para definir uma descrição, use o campo description.

Autenticação entre Redshift e Amazon S3

Por padrão, o resultado é descarregado no Amazon S3 no formato parquet. Para descarregar o resultado como um arquivo de texto delimitado por barras, especifique a opção a seguir.

.option("unload_s3_format", "TEXT")

Instruções de pushdown

Parameter Obrigatório Padrão Descrição
spark.datasource.redshift.community.autopushdown.lazyMode Não Verdadeiro

Especifica se o conector deve executar lentamente as instruções de aplicação do Redshift.

Se for verdadeiro, o conector Spark recuperará todos os modelos e as informações relacionados antes de executar a consulta, o que geralmente melhora a performance.

Se for falso, o conector Spark executará as instruções de aplicação imediatamente no thread principal do driver do Spark e será serializado em todas as expressões.

Parâmetros do conector

O mapa de parâmetros ou OPTIONS no Spark SQL é compatível com as seguintes configurações.

Parameter Obrigatório Padrão Descrição
dbtable Sim, a menos que a consulta seja especificada N/D A tabela para criar ou ler no Redshift. Este parâmetro é necessário ao salvar dados no Redshift.
consulta Sim, a menos que dbtable seja especificado N/D A consulta para ler do Redshift.
usuário Não N/D O nome de usuário do Redshift. Deve ser usado com o parâmetro password. Válido somente se o usuário e a senha não forem parâmetros no URL. Usar os dois causará um erro.
password Não N/D A senha do Redshift. Deve ser usado com o parâmetro user. Válido somente se o usuário e a senha não forem parâmetros no URL. Usar os dois causará um erro.
url Não N/D

Um URL de JDBC. O formato é jdbc:subprotocol://host:port/database?user=username&password=password.

O subprotocolo pode ser postgresql ou Redshift, dependendo do driver JDBC que você carregou. Observe que um driver compatível com o Redshift deve estar no classpath e corresponder a esse URL.

O host e a porta devem apontar para o nó principal do Redshift, então você deve configurar grupos de segurança e/ou VPC para permitir o acesso de sua aplicação de driver.

O banco de dados é o nome do banco de dados do Redshift.

O usuário e a senha são credenciais para acessar o banco de dados, que devem estar incorporadas nesse URL para JDBC, e o usuário do banco de dados deve ter as permissões necessárias para acessar a tabela.

aws_iam_role Somente se estiver usando perfis do IAM para autorizar operações COPY/UNLOAD do Redshift N/D ARN totalmente especificado do perfil do IAM anexado ao cluster do Redshift.
forward_spark_s3_credentials Não Falso Indica se essa biblioteca deve descobrir automaticamente as credenciais que o Spark usa para se conectar ao Amazon S3 e se deve encaminhar essas credenciais para o Redshift pelo driver JDBC. Essas credenciais são enviadas como parte da consulta JDBC. Portanto, recomendamos que você habilite a criptografia SSL com conexão JDBC ao usar essa opção.
temporary_aws_access_key_id Não N/D Chave de acesso da AWS. Você deve ter permissões de gravação no bucket do S3.
temporary_aws_secret_access_key Não N/D A chave de acesso secreta da AWS que corresponde à chave de acesso.
temporary_aws_session_token Não N/D Token de sessão da AWS que corresponde à chave de acesso fornecida.
tempdir Não N/D Um local gravável no Amazon S3. Usado para descarregar dados durante a leitura e dados do Avro para serem carregados no Redshift durante a gravação. Se você estiver usando uma fonte de dados do Redshift para o Spark como parte de um pipeline de ETL normal, poderá ser útil definir uma política de ciclo de vida em um bucket e usá-lo como um local temporário para esses dados.
jdbcdriver Não Determinado pelo subprotocolo do URL de JDBC O nome da classe do driver JDBC a ser usado. Essa classe deve estar no classpath. Na maioria dos casos, não deve ser necessário especificar essa opção, pois o nome de classe do driver apropriado deve ser determinado automaticamente pelo subprotocolo do URL de JDBC.
diststyle Não Even O estilo de distribuição do Redshift a ser usado ao criar uma tabela. As opções válidas são EVEN, KEY ou ALL. Ao usar KEY, você também deve definir uma chave de distribuição com a opção distkey.
distkey Não, a menos que esteja usando DISTSTYLE_KEY N/D O nome de uma coluna na tabela para usar como chave de distribuição ao criar uma tabela.
sortkeyspec Não N/D Uma definição completa de chave de classificação do Redshift.
include_column_list Não Falso Indica se essa biblioteca deve extrair automaticamente as colunas do esquema e adicioná-las ao comando COPY de acordo com as opções de mapeamento de colunas.
description Não N/D Uma descrição da tabela. A descrição é definida com o comando SQL COMMENT e aparece na maioria das ferramentas de consulta. Veja os metadados de description para definir descrições em colunas individuais.
preactions Não N/D Uma lista delimitada por ponto e vírgula dos comandos SQL a serem executados antes de carregar o comando COPY. Pode ser útil para executar comandos DELETE ou similares antes de carregar novos dados. Se o comando contiver %s, o nome da tabela será formatado antes do tempo de execução (caso você esteja usando uma tabela de preparação). Se esse comando falhar, ele será tratado como uma exceção. Se você estiver usando uma tabela de preparação, as alterações serão revertidas e restaurarão a tabela de backup se preactions falhar.
extracopyoptions Não N/D

Uma lista de opções extras para anexar ao comando COPY do Redshift ao carregar dados (comoTRUNCATECOLUMNS ou MAXERROR n). Consulte Parâmetro opcional para obter uma lista completa dos parâmetros disponíveis.

Observe que, como essas opções são anexadas ao final do comando COPY, você só pode usar opções que façam sentido no final do comando. Isso deve abranger a maioria dos casos de uso possíveis.

sse_kms_key Não N/D O ID da chave do AWS KMS a ser usado para criptografia do lado do servidor no S3 durante a operação UNLOAD do Redshift, em vez da criptografia padrão da AWS. O perfil do IAM do Redshift deve ter acesso à chave do KMS para gravar com ele, e o perfil do IAM do Spark deve ter acesso à chave para as operações de leitura. A leitura de dados criptografados não requer alterações (a AWS resolve isso), desde que o perfil do IAM do Spark tenha o acesso adequado.
tempformat Não AVRO O formato no qual salvar arquivos temporários no Amazon S3 ao gravar no Redshift. Os valores válidos são AVRO, CSV e CSV GZIP (CSV compactado).
csvnullstring (experimental) Não Null O valor da string a ser gravado para nulos ao usar o tempformat CSV. Deve ser um valor que não aparece nos dados reais.
autopushdown Não Verdadeiro Indica se é necessário realizar aplicação de predicados e consultas ao capturar e analisar os planos lógicos do Spark para operações SQL. As operações são traduzidas em uma consulta SQL e executadas no Redshift para melhorar a performance.
autopushdown.s3_result_cache Não Falso Armazene a consulta SQL em cache para descarregar dados do mapeamento de caminhos do Amazon S3 na memória, para que a mesma consulta não precise ser executada novamente na mesma sessão do Spark. Só é compatível quando o parâmetro autopushdown está ativado. Não recomendamos usar esse parâmetro ao misturar operações de leitura e gravação, pois os resultados armazenados em cache podem conter informações obsoletas.
unload_s3_format Não Parquet O formato para descarregar os resultados da consulta. As opções válidas são Parquet e Text, que especificam o descarregamento dos resultados da consulta no formato de texto delimitado por barras.
extraunloadoptions Não N/D Opções extras para anexar ao comando UNLOAD do Redshift. Não há garantia de que todas as opções funcionem, pois algumas opções podem entrar em conflito com outras opções definidas no conector.
copydelay Não 30000 O atraso (em ms) entre novas tentativas de operações COPY do Redshift.
copyretrycount Não 2 O número de novas tentativas para operações COPY do Redshift.
tempdir_region Não N/D

A região da AWS em que tempdir está localizado. A configuração dessa opção melhora a performance do conector para interações com tempdir além de fornecer automaticamente esse valor como parte das operações COPY e UNLOAD durante as operações de leitura e gravação do conector.

Essa configuração é recomendada nas seguintes situações:

1) Quando o conector estiver em execução fora da AWS, pois a descoberta automática da região falhará e afetará negativamente a performance do conector.

2) Quando tempdir estiver em uma região diferente do cluster do Redshift, pois o uso dessa configuração diminui a necessidade de fornecer a região manualmente usando os parâmetros extracopyoptions e extraunloadoptions. tempdir não pode estar em uma região diferente do cluster do Redshift ao usar PARQUET como tempformat, mesmo que esteja usando esse parâmetro.

3) Quando o conector estiver em execução em uma região diferente de tempdir, pois melhora a performance de acesso de tempdir do conector.

secret.id Não N/D O nome ou ARN do segredo armazenado no AWS Secrets Manager. É possível usar esse parâmetro para fornecer automaticamente as credenciais do Redshift, mas somente se o usuário, a senha e as credenciais de DbUser não forem passadas para o URL do JDBC ou como outras opções.
secret.region Não N/D

A região da AWS principal, como Leste dos EUA (N. da Virgínia), para pesquisar o valor de secret.id.

Se você não especificar essa região, o conector tentará usar a Cadeia de fornecedores de credenciais padrão para resolver a região de secret.id. Em alguns casos (por exemplo, se você estiver usando o conector fora da AWS), o conector não conseguirá encontrar a região. Recomendamos o uso dessa configuração nas seguintes situações:

1) Quando o conector está em execução fora da AWS, pois a descoberta automática de região falhará e impedirá a autenticação com o Redshift

Quando o conector estiver em execução em uma região diferente de secret.id, pois melhora a performance de acesso do segredo do conector.

secret.vpcEndpointUrl Não N/D O URL do endpoint de DNS do PrivateLink para AWS Secrets Manager ao substituir a Cadeia de fornecedores de credenciais padrão.
secret.vpcEndpointRegion Não N/D A região do endpoint de DNS do PrivateLink para AWS Secrets Manager ao substituir a Cadeia de fornecedores de credenciais padrão.
jdbc.* Não N/D Parâmetros adicionais a serem transmitidos ao driver JDBC subjacente, em que o caractere curinga é o nome do parâmetro JDBC, como jdbc.ssl. Observe que o prefixo jdbc será removido antes de ser transmitido ao driver JDBC. Para ver todas as opções possíveis para o driver JDBC do Redshift, consulte Opções para a configuração do driver JDBC versão 2.1.
rótulo Não " " Um identificador a ser incluído no grupo de consultas definido ao executar consultas com o conector. Deve ter 100 caracteres ou menos e todos os caracteres devem ser unicodeIdentifierParts válidos. Se o identificador tiver mais de 100 caracteres, o excesso será removido. Ao executar uma consulta com o conector, o grupo de consultas será definido como uma string no formato JSON, como
{"spark-redshift-connector":{"svc":"","ver":"5.1.0-amzn-1-spark_3.3","op":"Read","lbl":""}}`)
. Essa opção substitui o valor da chave lbl.
nota

Confirmação: esta documentação contém exemplos de código e linguagem desenvolvidos pela Apache Software Foundation e licenciados sob a licença Apache 2.0.