Introdução às transferências do Amazon S3

O Serviço de transferência de dados do BigQuery para o Amazon S3 permite-lhe agendar e gerir automaticamente tarefas de carregamento recorrentes do Amazon S3 para o BigQuery.

Formatos de ficheiros suportados

O Serviço de transferência de dados do BigQuery suporta o carregamento de dados do Amazon S3 num dos seguintes formatos:

  • Valores separados por vírgulas (.csv)
  • JSON (delimitado por newline)
  • Avro
  • Parquet
  • ORC

Tipos de compressão suportados

O Serviço de transferência de dados do BigQuery para o Amazon S3 suporta o carregamento de dados comprimidos. Os tipos de compressão suportados pelo Serviço de transferência de dados do BigQuery são os mesmos que os tipos de compressão suportados pelas tarefas de carregamento do BigQuery. Para mais informações, consulte o artigo Carregar dados comprimidos e não comprimidos.

Pré-requisitos do Amazon S3

Para carregar dados de uma origem de dados do Amazon S3, tem de:

  • Indique o URI do Amazon S3 para os dados de origem
  • Tenha o ID da chave de acesso
  • Ter a chave de acesso secreta
  • Defina, no mínimo, a política gerida pela AWS AmazonS3ReadOnlyAccess nos dados de origem do Amazon S3

URIs do Amazon S3

Quando fornece o URI do Amazon S3, o caminho tem de estar no seguinte formato: s3://bucket/folder1/folder2/... Só é necessário o nome do contentor de nível superior. Os nomes das pastas são opcionais. Se especificar um URI que inclua apenas o nome do contentor, todos os ficheiros no contentor são transferidos e carregados para o BigQuery.

Parametrização do tempo de execução da transferência do Amazon S3

O URI do Amazon S3 e a tabela de destino podem ser ambos parametrizados, o que lhe permite carregar dados de contentores do Amazon S3 organizados por data. Tenha em atenção que não é possível parametrizar a parte do URI relativa ao contentor. Os parâmetros usados pelas transferências do Amazon S3 são os mesmos que os usados pelas transferências do Cloud Storage.

Para ver detalhes, consulte o artigo Parâmetros de tempo de execução nas transferências.

Carregamento de dados para transferências do Amazon S3

Pode especificar como os dados são carregados no BigQuery selecionando uma preferência de escrita na configuração da transferência quando configura uma transferência do Amazon S3.

Estão disponíveis dois tipos de preferências de gravação: transferências incrementais e transferências truncadas.

Transferências incrementais

Uma configuração de transferência com uma preferência de escrita APPEND ou WRITE_APPEND, também denominada transferência incremental, anexa incrementalmente novos dados desde a transferência bem-sucedida anterior para uma tabela de destino do BigQuery. Quando uma configuração de transferência é executada com uma preferência de escrita APPEND, o Serviço de transferência de dados do BigQuery filtra os ficheiros que foram modificados desde a execução de transferência bem-sucedida anterior. Para determinar quando um ficheiro é modificado, o serviço de transferência de dados do BigQuery analisa os metadados do ficheiro para uma propriedade de "hora da última modificação". Por exemplo, o Serviço de transferência de dados do BigQuery analisa a propriedade de data/hora updated num ficheiro do Cloud Storage. Se o Serviço de transferência de dados do BigQuery encontrar ficheiros com uma "data/hora da última modificação" que tenha ocorrido após a data/hora da última transferência bem-sucedida, o Serviço de transferência de dados do BigQuery transfere esses ficheiros numa transferência incremental.

Para demonstrar como funcionam as transferências incrementais, considere o seguinte exemplo de transferência do Cloud Storage. Um utilizador cria um ficheiro num contentor do Cloud Storage a 01/07/2023 às 00:00 UTC com o nome file_1. A data/hora updated de file_1 é a hora em que o ficheiro foi criado. Em seguida, o utilizador cria uma transferência incremental a partir do contentor do Cloud Storage, agendada para ser executada uma vez por dia às 03:00 UTC, a partir de 01/07/2023 às 03:00 UTC.

  • A 2023-07-01T03:00Z, é iniciada a primeira execução da transferência. Como esta é a primeira execução de transferência para esta configuração, o Serviço de transferência de dados do BigQuery tenta carregar todos os ficheiros que correspondem ao URI de origem para a tabela do BigQuery de destino. A execução da transferência é bem-sucedida e o Serviço de transferência de dados do BigQuery carrega file_1 com êxito para a tabela do BigQuery de destino.
  • A próxima execução da transferência, a 02/07/2023 às 03:00 UTC, não deteta ficheiros em que a propriedade de data/hora updated seja superior à da última execução da transferência bem-sucedida (01/07/2023 às 03:00 UTC). A execução da transferência é bem-sucedida sem carregar dados adicionais para a tabela do BigQuery de destino.

O exemplo anterior mostra como o Serviço de transferência de dados do BigQuery analisa a propriedade de data/hora do ficheiro de origem para determinar se foram feitas alterações aos ficheiros de origem e transferir essas alterações, se forem detetadas.updated

Seguindo o mesmo exemplo, suponhamos que o utilizador cria outro ficheiro no contentor do Cloud Storage às 2023-07-03T00:00Z, denominado file_2. A data/hora updated de file_2 é a hora em que o ficheiro foi criado.

  • A próxima execução da transferência, a 03-07-2023 às 03:00 Z, deteta que file_2 tem uma data/hora updated superior à da última execução da transferência bem-sucedida (01-07-2023 às 03:00 Z). Suponhamos que, quando a execução da transferência é iniciada, falha devido a um erro temporário. Neste cenário, file_2 não é carregado na tabela do BigQuery de destino. A data/hora da última execução de transferência bem-sucedida permanece em 2023-07-01T03:00Z.
  • A próxima execução da transferência, a 04/07/2023 às 03:00 Z, deteta que file_2 tem uma data/hora updated superior à da última execução da transferência bem-sucedida (01/07/2023 às 03:00 Z). Desta vez, a execução da transferência é concluída sem problemas, pelo que carrega file_2 com êxito para a tabela de destino do BigQuery.
  • A próxima execução da transferência, a 05/07/2023 às 03:00 UTC, não deteta ficheiros em que a data/hora updated seja posterior à da última execução da transferência bem-sucedida (04/07/2023 às 03:00 UTC). A execução da transferência é bem-sucedida sem carregar dados adicionais para a tabela do BigQuery de destino.

O exemplo anterior mostra que, quando uma transferência falha, não são transferidos ficheiros para a tabela de destino do BigQuery. Todas as alterações aos ficheiros são transferidas na próxima execução de transferência bem-sucedida. As transferências bem-sucedidas subsequentes após uma transferência com falha não causam dados duplicados. No caso de uma transferência falhada, também pode optar por acionar manualmente uma transferência fora da hora agendada regularmente.

Transferências truncadas

Uma configuração de transferência com uma preferência de escrita MIRROR ou WRITE_TRUNCATE, também denominada transferência truncada, substitui os dados na tabela de destino do BigQuery durante cada execução de transferência com dados de todos os ficheiros que correspondem ao URI de origem. MIRROR substitui uma nova cópia dos dados na tabela de destino. Se a tabela de destino estiver a usar um decorador de partição, a execução da transferência apenas substitui os dados na partição especificada. Uma tabela de destino com um decorador de partição tem o formato my_table${run_date}, por exemplo, my_table$20230809.

A repetição das mesmas transferências incrementais ou truncadas num dia não causa dados duplicados. No entanto, se executar várias configurações de transferência diferentes que afetem a mesma tabela de destino do BigQuery, isto pode fazer com que o Serviço de transferência de dados do BigQuery duplique os dados.

Compatibilidade com carateres universais para URIs do Amazon S3

Se os dados de origem estiverem separados em vários ficheiros que partilham um nome base comum, pode usar um caráter universal no URI quando carregar os dados. Um caráter universal consiste num asterisco (*) e pode ser usado em qualquer parte do URI do Amazon S3, exceto no nome do contentor.

Embora seja possível usar mais do que um caráter universal no URI do Amazon S3, é possível fazer alguma otimização quando o URI do Amazon S3 especifica apenas um caráter universal:

  • Existe um limite superior no número máximo de ficheiros por execução de transferência.

  • O caráter universal abrange os limites do diretório. Por exemplo, o URI do Amazon S3 s3://my-bucket/*.csv corresponde ao ficheiro s3://my-bucket/my-folder/my-subfolder/my-file.csv.

Exemplos de URI do Amazon S3

Exemplo 1

Para carregar um único ficheiro do Amazon S3 para o BigQuery, especifique o URI do Amazon S3 do ficheiro.

s3://my-bucket/my-folder/my-file.csv

Exemplo 2

Para carregar todos os ficheiros de um contentor do Amazon S3 para o BigQuery, especifique apenas o nome do contentor, com ou sem um caráter universal.

s3://my-bucket/

ou

s3://my-bucket/*

Tenha em atenção que s3://my-bucket* não é um URI do Amazon S3 permitido, uma vez que não é possível usar um caráter universal no nome do contentor.

Exemplo 3

Para carregar todos os ficheiros do Amazon S3 que partilham um prefixo comum, especifique o prefixo comum seguido de um caráter universal.

s3://my-bucket/my-folder/*

Tenha em atenção que, ao contrário do carregamento de todos os ficheiros de um contentor do Amazon S3 de nível superior, tem de especificar o caráter universal no final do URI do Amazon S3 para carregar ficheiros.

Exemplo 4

Para carregar todos os ficheiros do Amazon S3 com um caminho semelhante, especifique o prefixo comum seguido de um caráter universal.

s3://my-bucket/my-folder/*.csv

Exemplo 5

Tenha em atenção que os carateres universais abrangem diretórios, pelo que todos os ficheiros csv em my-folder, bem como nas subpastas de my-folder, são carregados para o BigQuery.

Se tiver estes ficheiros de origem numa pasta logs:

s3://my-bucket/logs/logs.csv
s3://my-bucket/logs/system/logs.csv
s3://my-bucket/logs/some-application/system_logs.log
s3://my-bucket/logs/logs_2019_12_12.csv

Em seguida, o seguinte identifica-os:

s3://my-bucket/logs/*

Exemplo 6

Se tiver estes ficheiros de origem, mas quiser transferir apenas os que têm logs.csv como nome do ficheiro:

s3://my-bucket/logs.csv
s3://my-bucket/metadata.csv
s3://my-bucket/system/logs.csv
s3://my-bucket/system/users.csv
s3://my-bucket/some-application/logs.csv
s3://my-bucket/some-application/output.csv

Em seguida, o seguinte identifica os ficheiros com logs.csv no nome:

s3://my-bucket/*logs.csv

Exemplo 7

A utilização de vários carateres universais permite um maior controlo sobre os ficheiros que são transferidos, mas tem limites inferiores. A utilização de vários carateres universais significa que cada caráter universal só vai estabelecer correspondência até ao final de um caminho num subdiretório. Por exemplo, para os seguintes ficheiros de origem no Amazon S3:

s3://my-bucket/my-folder1/my-file1.csv
s3://my-bucket/my-other-folder2/my-file2.csv
s3://my-bucket/my-folder1/my-subfolder/my-file3.csv
s3://my-bucket/my-other-folder2/my-subfolder/my-file4.csv

Se a intenção for transferir apenas my-file1.csv e my-file2.csv, use o seguinte como valor para o URI do Amazon S3:

s3://my-bucket/*/*.csv

Como nenhum caráter universal abrange diretórios, este URI limitaria a transferência apenas aos ficheiros CSV que se encontram em my-folder1 e my-other-folder2. As subpastas não seriam incluídas na transferência.

Chaves de acesso do AWS

O ID da chave de acesso e a chave de acesso secreta são usados para aceder aos dados do Amazon S3 em seu nome. Como prática recomendada, crie um ID da chave de acesso e uma chave de acesso secreta únicos especificamente para transferências do Amazon S3, de modo a conceder acesso mínimo ao Serviço de transferência de dados do BigQuery. Para obter informações sobre a gestão das suas chaves de acesso, consulte a documentação de referência geral da AWS.

Restrições de IP

Se usar restrições de IP para aceder ao Amazon S3, tem de adicionar os intervalos de IP usados pelos trabalhadores do Serviço de transferência de dados do BigQuery à sua lista de IPs permitidos.

Para adicionar intervalos de IP como endereços IP públicos permitidos ao Amazon S3, consulte as restrições de IP.

Considerações de consistência

Quando transfere dados do Amazon S3, é possível que alguns dos seus dados não sejam transferidos para o BigQuery, especialmente se os ficheiros tiverem sido adicionados ao contentor muito recentemente. Um ficheiro demora aproximadamente 5 minutos a ficar disponível para o Serviço de transferência de dados do BigQuery depois de ser adicionado ao contentor.

Prática recomendada para custos de transferência de dados de saída

As transferências do Amazon S3 podem falhar se a tabela de destino não tiver sido configurada corretamente. Seguem-se alguns motivos que podem resultar numa configuração incorreta:

  • A tabela de destino não existe.
  • O esquema da tabela não está definido.
  • O esquema da tabela não é compatível com os dados que estão a ser transferidos.

Para evitar custos de transferência de dados de saída do Amazon S3, deve testar primeiro uma transferência com um subconjunto pequeno, mas representativo, dos ficheiros. Pequeno significa que o teste deve ter um tamanho de dados pequeno e uma pequena quantidade de ficheiros.

Preços

Para informações sobre os preços do Serviço de transferência de dados do BigQuery, consulte a página Preços.

Tenha em atenção que podem ser incorridos custos fora da Google ao usar este serviço. Reveja a página de preços do Amazon S3 para ver detalhes.

Quotas e limites

O Serviço de transferência de dados do BigQuery usa tarefas de carregamento para carregar dados do Amazon S3 para o BigQuery. Todas as cotas e limites do BigQuery em tarefas de carregamento aplicam-se a transferências recorrentes do Amazon S3, com as seguintes considerações adicionais:

Valor Limite
Tamanho máximo por execução de transferência de tarefa de carregamento 15 TB
Número máximo de ficheiros por execução de transferência quando o URI do Amazon S3 inclui 0 ou 1 carateres universais 10 000 000 de ficheiros
Número máximo de ficheiros por execução de transferência quando o URI do Amazon S3 inclui mais de 1 caráter universal 10 000 ficheiros

O que se segue?