Consultar dados do Cloud Storage em tabelas BigLake
Este documento descreve como consultar dados armazenados numa tabela BigLake do Cloud Storage.
Antes de começar
Certifique-se de que tem uma tabela do BigLake do Cloud Storage.
Funções necessárias
Para consultar tabelas do BigLake no Cloud Storage, certifique-se de que tem as seguintes funções:
- Visualizador de dados do BigQuery (
roles/bigquery.dataViewer
) - Utilizador do BigQuery (
roles/bigquery.user
)
Consoante as suas autorizações, pode atribuir estas funções a si próprio ou pedir ao seu administrador para as atribuir. Para mais informações sobre a concessão de funções, consulte o artigo Ver as funções atribuíveis aos recursos.
Para ver as autorizações exatas necessárias para consultar tabelas do Cloud Storage BigLake, expanda a secção Autorizações necessárias:
Autorizações necessárias
bigquery.jobs.create
bigquery.readsessions.create
(Só é necessário se estiver a ler dados com a API BigQuery Storage Read)bigquery.tables.get
bigquery.tables.getData
Também pode obter estas autorizações com funções personalizadas ou outras funções predefinidas
Consultar tabelas do BigLake
Depois de criar uma tabela BigLake do Cloud Storage, pode
consultá-la através da sintaxe GoogleSQL,
tal como se fosse uma tabela padrão do BigQuery. Por exemplo,
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
.
Consultar tabelas do BigLake com ferramentas de tratamento de dados externos
Pode usar conetores do BigQuery com outras ferramentas de processamento de dados para aceder a tabelas do BigLake no Cloud Storage. Para mais informações, consulte o artigo Conetores.
Apache Spark
O exemplo seguinte usa o Dataproc, mas também funciona com qualquer implementação do Spark que use o conetor Spark-BigQuery.
Neste exemplo, fornece o conetor Spark-BigQuery como uma ação de inicialização quando cria um cluster. Esta ação permite-lhe usar um bloco de notas do Zeppelin e praticar o percurso do utilizador analista de dados.
As versões do conetor Spark-BigQuery estão listadas no repositório GoogleCloudDataproc/spark-bigquery-connector do GitHub.
Crie um cluster de nó único com a ação de inicialização para o conetor do Spark-BigQuery:
gcloud dataproc clusters create biglake-demo-cluster \ --optional-components=ZEPPELIN \ --region=REGION \ --enable-component-gateway \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata spark-bigquery-connector-url= gs://spark-lib/bigquery/spark-bigquery-with-dependencies_SCALA_VERSION-CONNECTOR_VERSION.jar
Apache Hive
O exemplo seguinte usa o Dataproc, mas também funciona com qualquer implementação do Hive que use o conetor Hive-BigQuery.
Neste exemplo, fornece o conector Hive-BigQuery como uma ação de inicialização quando cria um cluster.
As versões do conetor Hive-BigQuery estão listadas no repositório do GitHub GoogleCloudDataproc/hive-bigquery-connector.
Crie um cluster de nó único com a ação de inicialização para o conetor do Hive-BigQuery:
gcloud dataproc clusters create biglake-hive-demo-cluster \ --region=REGION \ --single-node \ --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \ --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar
Para mais informações acerca do conetor Hive-BigQuery, consulte o artigo Use o conetor Hive-BigQuery.
Dataflow
Para ler tabelas do BigLake a partir do Dataflow, use o conetor do Dataflow no modo DIRECT_READ
para usar a API BigQuery Storage. A leitura a partir de uma string de consulta
também é suportada. Consulte o BigQuery I/O
na documentação do Apache Beam.
Consultar tabelas temporárias do BigLake
A consulta de uma origem de dados externa através de uma tabela temporária é útil para consultas únicas e ad hoc sobre dados externos ou para processos de extração, transformação e carregamento (ETL).
Para consultar uma origem de dados externa sem criar uma tabela permanente, fornece uma definição de tabela para a tabela temporária e, em seguida, usa essa definição de tabela num comando ou numa chamada para consultar a tabela temporária. Pode fornecer a definição da tabela de qualquer uma das seguintes formas:
- Um ficheiro de definição de tabela
- Uma definição de esquema inline
- Um ficheiro de esquema JSON
O ficheiro de definição da tabela ou o esquema fornecido é usado para criar a tabela externa temporária e a consulta é executada na tabela externa temporária.
Quando usa uma tabela externa temporária, não cria uma tabela num dos seus conjuntos de dados do BigQuery. Uma vez que a tabela não está armazenada permanentemente num conjunto de dados, não pode ser partilhada com outras pessoas.
Pode criar e consultar uma tabela temporária associada a uma origem de dados externa através da ferramenta de linha de comandos bq, da API ou das bibliotecas de cliente.
bq
Use o comando
bq query
com a flag
--external_table_definition
.
(Opcional) Forneça a flag --location
e defina o valor para a sua
localização.
Para consultar uma tabela temporária associada à sua origem de dados externa através de um ficheiro de definição de tabela, introduza o seguinte comando.
bq --location=LOCATION query \ --external_table_definition=TABLE::DEFINITION_FILE \ 'QUERY'
Substitua o seguinte:
LOCATION
: o nome da sua localização. A flag--location
é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag comoasia-northeast1
. Pode predefinir um valor para a localização através do ficheiro.bigqueryrc.TABLE
: o nome da tabela temporária que está a criar.DEFINITION_FILE
: o caminho para o ficheiro de definição da tabela no seu computador local.QUERY
: a consulta que está a enviar para a tabela temporária.
Por exemplo, o seguinte comando cria e consulta uma tabela temporária
denominada sales
através de um ficheiro de definição de tabela denominado sales_def
.
bq query \
--external_table_definition=sales::sales_def@us.myconnection \
'SELECT
Region,
Total_sales
FROM
sales'
Para consultar uma tabela temporária associada à sua origem de dados externa através de uma definição de esquema inline, introduza o seguinte comando.
bq --location=LOCATION query \ --external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ 'query'
Substitua o seguinte:
LOCATION
: o nome da sua localização. A flag--location
é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag comoasia-northeast1
. Pode predefinir um valor para a localização através do ficheiro.bigqueryrc.TABLE
: o nome da tabela temporária que está a criar.SCHEMA
: a definição do esquema inline no formatofield:data_type,field:data_type
.SOURCE_FORMAT
: o formato da origem de dados externa, por exemplo,CSV
.BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.Pode selecionar vários ficheiros do contentor especificando um caráter universal (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o caminho de recurso do Cloud Storage.
PROJECT_ID
: o projeto que contém a ligação.REGION
: a região que contém a ligação, por exemplo,us
.CONNECTION_ID
: o nome da associação, por exemplo,myconnection
.QUERY
: a consulta que está a enviar para a tabela temporária.
Por exemplo, o comando seguinte cria e consulta uma tabela temporária
denominada sales
associada a um ficheiro CSV armazenado no Cloud Storage com a
seguinte definição de esquema:
Region:STRING,Quarter:STRING,Total_sales:INTEGER
.
bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv@us.myconnection \
'SELECT
Region,
Total_sales
FROM
sales'
Para consultar uma tabela temporária associada à sua origem de dados externa através de um ficheiro de esquema JSON, introduza o seguinte comando.
bq --location=LOCATION query \ --external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \ 'QUERY'
Substitua o seguinte:
LOCATION
: o nome da sua localização. A flag--location
é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag comoasia-northeast1
. Pode predefinir um valor para a localização através do ficheiro.bigqueryrc.SCHEMA_FILE
: o caminho para o ficheiro de esquema JSON no seu computador local.SOURCE_FORMAT
: o formato da origem de dados externa, por exemplo,CSV
.BUCKET_PATH
: o caminho para o contentor do Cloud Storage que contém os dados da tabela, no formatogs://bucket_name/[folder_name/]file_pattern
.Pode selecionar vários ficheiros do contentor especificando um caráter universal (
*
) nofile_pattern
. Por exemplo,gs://mybucket/file00*.parquet
. Para mais informações, consulte o artigo Suporte de carateres universais para URIs do Cloud Storage.Pode especificar vários contentores para a opção
uris
fornecendo vários caminhos.Os exemplos seguintes mostram valores
uris
válidos:gs://bucket/path1/myfile.csv
gs://bucket/path1/*.parquet
gs://bucket/path1/file1*
,gs://bucket1/path1/*
Quando especifica valores
uris
que segmentam vários ficheiros, todos esses ficheiros têm de partilhar um esquema compatível.Para mais informações sobre a utilização de URIs do Cloud Storage no BigQuery, consulte o caminho de recurso do Cloud Storage.
PROJECT_ID
: o projeto que contém a ligação.REGION
: a região que contém a ligação, por exemplo,us
.CONNECTION_ID
: o nome da associação, por exemplo,myconnection
.QUERY
: a consulta que está a enviar para a tabela temporária.
Por exemplo, o comando seguinte cria e consulta uma tabela temporária
denominada sales
associada a um ficheiro CSV armazenado no Cloud Storage através do
ficheiro de esquema /tmp/sales_schema.json
.
bq query \ --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv@us.myconnection \ 'SELECT Region, Total_sales FROM sales'
API
Para executar uma consulta através da API, siga estes passos:
- Crie um objeto
Job
. - Preencha a secção
configuration
do objetoJob
com um objetoJobConfiguration
. - Preencha a secção
query
do objetoJobConfiguration
com um objetoJobConfigurationQuery
. - Preencha a secção
tableDefinitions
do objetoJobConfigurationQuery
com um objetoExternalDataConfiguration
. Especifique a ligação a usar para ligar ao Cloud Storage no campoconnectionId
. - Chame o método
jobs.insert
para executar a consulta de forma assíncrona ou o métodojobs.query
para executar a consulta de forma síncrona, transmitindo o objetoJob
.
O que se segue?
- Saiba como usar o SQL no BigQuery.
- Saiba mais sobre as tabelas do BigLake.
- Saiba mais acerca das quotas do BigQuery.