Como consultar dados do Cloud Bigtable

Nesta página, é descrito como usar o BigQuery para consultar dados armazenados no Cloud Bigtable.

O Cloud Bigtable é o banco de dados NoSQL do Google. Ele é preenchido de maneira esparsa e é capaz de se expandir a bilhões de linhas, milhares de colunas e petabytes de dados. Esse modelo de dados é parecido com o Apache HBase e inclui uma biblioteca de cliente compatível com o HBase. Para informações sobre o modelo de dados do Cloud Bigtable, consulte Modelo de armazenamento.

Zonas e regiões compatíveis

Atualmente, a consulta de dados no Cloud Bigtable só está disponível nas seguintes regiões e zonas:
Região Zonas
us-central1

us-central1-a

us-central1-b

us-central1-c

us-central1-f

europe-west1

europe-west1-b

europe-west1-c

europe-west1-d

Como recuperar o URI do Cloud Bigtable

Para criar uma tabela externa para uma fonte de dados do Cloud Bigtable, você precisa fornecer o URI dele. Para recuperar o URI do Cloud Bigtable:

  1. Abra o console do Cloud Bigtable.

    Abrir console do Cloud Bigtable

  2. Recupere os seguintes detalhes sobre a fonte de dados do Cloud Bigtable:

    • o código do projeto
    • o código da instância do Cloud Bigtable
    • o nome da tabela do Cloud Bigtable
  3. Escreva o URI do Cloud Bigtable usando o seguinte formato, em que:

    • [PROJECT_ID] é o projeto que contém a instância do Cloud Bigtable;
    • [INSTANCE_ID] é o código da instância do Cloud Bigtable;
    • [TABLE_NAME] é o nome da tabela que você está consultando.

    https://googleapis.com/bigtable/projects/[PROJECT_ID]/instances/[INSTANCE_ID]/tables/[TABLE_NAME]

Escopos e controles de acesso

Controles de acesso para tabelas externas permanentes

Compartilhe o acesso a uma tabela externa permanente vinculada a uma fonte de dados do Google Cloud Bigtable. Não é possível compartilhar o acesso a uma tabela externa temporária.

Compartilhe o acesso a uma tabela externa permanente com usuários, inclusive contas de serviço, ou grupos. Para consultar a tabela externa, os usuários ou grupos precisam de pelo menos:

  • acesso de READER ou bigquery.dataViewer ao conjunto de dados que contém a tabela externa;
  • acesso bigquery.user o projeto que contém o conjunto de dados para executar jobs de consulta;
  • acesso bigtable.reader ao Cloud Bigtable que fornece acesso somente leitura a metadados e tabelas.

Escopos para instâncias do Compute Engine

Ao criar uma instância do Compute Engine, especifique uma lista de escopos para ela. Os escopos controlam o acesso da instância aos produtos do Google Cloud Platform, inclusive o Cloud Bigtable. Os aplicativos em execução na VM usam a conta do serviço para chamar as APIs do Google Cloud.

Se você configurar uma instância do Compute Engine para ser executada como conta de serviço e ela acessar uma tabela externa vinculada a uma fonte de dados do Cloud Bigtable, será preciso adicionar à instância o escopo de acesso a dados somente leitura do Cloud Bigtable (https://www.googleapis.com/auth/bigtable.data.readonly). Para mais informações, consulte Como criar uma instância do Compute Engine para o Cloud Bigtable.

Para informações sobre como aplicar escopos a uma instância do Compute Engine, consulte Como alterar a conta de serviço e os escopos de acesso de uma instância. Para mais informações sobre as contas de serviço do Compute Engine, consulte Contas de serviços.

Tabelas externas permanentes x temporárias

É possível consultar uma fonte de dados externa no BigQuery usando uma tabela permanente ou uma temporária. A tabela permanente é criada no conjunto de dados do BigQuery vinculado à fonte de dados externa. Como ela é permanente, você pode usar os controles de acesso em nível de conjunto de dados para compartilhá-la com outros que também tenham acesso à fonte de dados externa subjacente. Além disso, é possível consultar a tabela a qualquer momento.

Ao consultar uma fonte de dados externa usando uma tabela temporária, você envia um comando que inclui uma consulta e cria uma tabela não permanente vinculada a essa fonte. A tabela temporária não é criada em um dos conjuntos de dados do BigQuery. Como ela não fica armazenada permanentemente em um conjunto de dados, não é possível compartilhá-la com outros. A consulta em uma fonte de dados externa usando uma tabela temporária é útil no caso de consultas ad hoc únicas em dados externos ou para extrair, transformar e carregar (ETL, na sigla em inglês) processos.

Como consultar dados do Cloud Bigtable usando tabelas externas permanentes

Para consultar uma fonte de dados do Cloud Bigtable usando uma tabela permanente, você cria a tabela em um conjunto de dados do BigQuery vinculado à fonte de dados do Cloud Bigtable. Os dados não são armazenados na tabela do BigQuery. Como a tabela é permanente, é possível usar controles de acesso no nível do conjunto de dados para compartilhar a tabela com outras pessoas que também tenham acesso à fonte de dados subjacente do Cloud Bigtable.

Quando você cria uma tabela externa permanente no BigQuery vinculada a uma fonte de dados do Cloud Bigtable, existem duas maneiras de especificar o esquema da tabela:

  • Se estiver usando a API ou a CLI, você criará um arquivo de definição da tabela que define o esquema e os metadados da fonte de dados externa.
  • Se estiver usando o Console do GCP ou a IU da Web clássica do BigQuery, você inserirá os qualificadores e o grupo de colunas do Cloud Bigtable manualmente.

Para consultar dados do Cloud Bigtable usando uma tabela externa permanente:

  • cria um arquivo de definição da tabela (para a CLI ou a API);
  • cria uma tabela no BigQuery vinculada à fonte de dados externa;
  • consulta os dados usando a tabela permanente.

Como criar e consultar uma tabela externa permanente

Para criar e consultar uma tabela permanente, faça o seguinte:

Console

No momento, não é possível consultar dados do Cloud Bigtable usando o Console do GCP.

IU clássica

  1. Acesse a IU da Web do BigQuery.
    Acessar a IU da Web do BigQuery

  2. No painel de navegação, passe o cursor sobre um conjunto de dados, clique no ícone de seta para baixo imagem do ícone de seta para baixo e selecione Criar nova tabela.

  3. Na página Criar tabela, na seção Dados de origem, faça o seguinte:

    • Em Local, selecione Google Cloud Bigtable. Depois, no campo de origem, insira o URI do Cloud Bigtable neste formato https://googleapis.com/bigtable/projects/[PROJECT_ID]/instances/[INSTANCE_ID]/tables/[TABLE_NAME]. em que [PROJECT_ID] é o projeto que contém a instância do Cloud Bigtable, [INSTANCE_ID] é o código da instância do Cloud Bigtable e [TABLE_NAME] é o nome da tabela que você está consultando.
    • Em Formato de arquivo, verifique se Cloud Bigtable está selecionado.
  4. Na página Criar tabela, na seção Tabela de destino:

    • Em Nome da tabela, escolha o conjunto de dados apropriado e, no campo apropriado, insira o nome da tabela permanente a ser criada no BigQuery.
    • Verifique se o Tipo de tabela está definido como Tabela externa.
  5. Na caixa Família de colunas e qualificadores, use Adicionar família para especificar famílias de colunas e qualificadores ou clique em Editar como texto e insira uma matriz JSON de famílias de colunas e qualificadores. Essa lista restringe as famílias de colunas que podem ser referenciadas e especifica os respectivos tipos de valor. Por exemplo:

      [
        {
          "familyId": "family_int",
          "type": "INTEGER",
          "encoding": "BINARY",
          "onlyReadLatest": "true",
          "columns": [
            {
              "qualifierString": "foo",
              "onlyReadLatest": "true"
            }
          ]
        }
      ]
    
    Use a lista de qualificadores de colunas para fazer conversões de tipo. Se você deixar a lista vazia, todos os grupos de colunas serão incluídos no esquema da tabela e os respectivos valores serão lidos como BYTES. Para mais informações, consulte as opções do Cloud Bigtable na documentação da API externalDataConfiguration.

  6. Selecione os itens aplicáveis na seção Opções e clique em Criar tabela.

Depois que a tabela permanente for criada, você poderá executar uma consulta na tabela como se ela fosse uma tabela BigQuery nativa, sujeita aos limites em fontes de dados externas. Para consultar a tabela na IU da Web, clique em Escrever consulta, insira-a na caixa Nova consulta e clique em Executar consulta.

Após a conclusão da consulta, você poderá exportar os resultados como arquivos CSV ou JSON, salvá-los como uma tabela ou no Planilhas Google. Consulte Fazer download, salvar e exportar dados para mais informações.

CLI

Crie uma tabela na ferramenta de linha de comando do BigQuery usando o comando bq mk. Ao usar a CLI para criar uma tabela vinculada a uma fonte de dados externa, você identifica o esquema da tabela usando um arquivo de definição da tabela.

  1. Use o comando bq mk para criar uma tabela permanente.

    bq mk --external_table_definition=[DEFINITION_FILE] [DATASET].[TABLE_NAME]
    

    Onde:

    • [DEFINITION_FILE] é o caminho para o arquivo de definição de tabelas na máquina local;
    • [DATASET] é o nome do conjunto de dados que contém a tabela;
    • [TABLE_NAME] é o nome da tabela que você está criando.

    Depois disso, execute uma consulta na tabela como faria se ela fosse uma tabela nativa do BigQuery, respeitando as limitações nas fontes de dados externas.

API

Como consultar dados do Cloud Bigtable usando tabelas externas temporárias

Para consultar uma fonte de dados externa sem criar uma tabela permanente, execute um comando para combinar:

  • um arquivo de definição de tabela com uma consulta;
  • uma definição de esquema in-line com uma consulta;
  • um arquivo de definição de esquema JSON com uma consulta.

O arquivo de definição de tabela ou esquema fornecido é usado para criar a tabela externa temporária, e a consulta será executada nela. Na CLI e na API do BigQuery, é permitido consultar uma fonte de dados externa usando uma tabela temporária.

A tabela externa temporária não é criada em um dos conjuntos de dados do BigQuery. Como ela não fica armazenada permanentemente em um conjunto de dados, não é possível compartilhá-la com outros. A consulta a uma fonte de dados externa usando uma tabela temporária é útil quando você quer consultar dados externos apenas uma vez, com um propósito específico, ou executar processos de Extração, transformação e carregamento (ETL, na sigla em inglês).

Como criar e consultar uma tabela externa temporária

Para consultar dados do Cloud Bigtable usando uma tabela externa temporária, você:

Atualmente, a criação e a consulta de uma tabela externa temporária são compatíveis com a CLI e a API.

CLI

Para consultar uma tabela temporária usando um arquivo de definição da tabela, digite o comando a seguir.

bq --location=[LOCATION] query --use_legacy_sql=false --external_table_definition=[TABLE_NAME]::[DEFINITION_FILE] '[QUERY]'

Onde:

  • [LOCATION] é o nome do seu local; A sinalização --location será opcional se os seus dados estiverem nos locais multirregionais US ou EU;
  • [TABLE_NAME] é o nome da tabela temporária que você está criando;
  • [DEFINITION_FILE] é o caminho para o arquivo de definição de tabelas na máquina local;
  • [QUERY] é a consulta que você está enviando para a tabela temporária.

Por exemplo, o comando a seguir cria e consulta uma tabela temporária chamada follows usando um arquivo de definição da tabela chamado follows_def.

bq --location=US query --use_legacy_sql=false --external_table_definition=follows::/tmp/follows_def 'SELECT COUNT(rowkey) FROM follows;'

API

Considerações sobre desempenho

O desempenho das consultas em fontes de dados externas do Cloud Bigtable depende de três fatores:

  • número de linhas
  • volume de dados lidos
  • extensão do carregamento em paralelo

O BigQuery tenta ler o mínimo de dados possível ao ler somente os grupos de colunas referenciados na consulta. A extensão do carregamento em paralelo depende de quantos nós você tem no cluster do Cloud Bigtable e de quantas divisões há na tabela.

O Cloud Bigtable mescla automaticamente as divisões com base no carregamento. Se a tabela não for lida com frequência, haverá menos divisões ao longo do tempo e uma degradação gradual no desempenho da consulta. Para mais informações sobre como dividir uma tabela por chave de linha, consulte como Gerenciar tabelas.

A consulta no Cloud Bigtable do BigQuery consome ciclos de CPU do Cloud Bigtable. Esse consumo pode afetar a latência e a capacidade de outras solicitações simultâneas, como exibir o tráfego do usuário ativo. Por exemplo, o alto uso da CPU no Cloud Bigtable afeta consultas extensas e aumenta a latência no 99º percentil.

É necessário monitorar o uso para verificar se você está dentro dos limites recomendados conforme observado no painel de monitoramento do Cloud Bigtable no Console do GCP. Aumentar o número de nós para a instância permite processar melhor o tráfego do BigQuery e o tráfego de outras solicitações simultâneas.

Esquema gerado

Por padrão, o BigQuery expõe os valores em um grupo de colunas como uma matriz de colunas e, nela, uma matriz de valores gravados em carimbos de data/hora diferentes. Esse esquema preserva o layout natural dos dados no Cloud Bigtable, mas as consultas SQL podem ser complexas. É possível promover colunas a subcampos no grupo de colunas pai e ler somente o último valor de cada célula. Isso representa as duas matrizes no esquema padrão como valores escalares.

Exemplo

Você armazena perfis de usuários em uma rede social fictícia. Um modelo de dados para esse caso seria o grupo de colunas profile com colunas individuais para gender, age e email:

rowkey | profile:gender| profile:age| profile:email
-------| --------------| -----------| -------------
alice  | female        | 30         | alice@gmail.com

Usando o esquema padrão, uma consulta SQL padrão para contar o número de usuários do sexo masculino com mais de 30 anos é:

SELECT COUNT(1) FROM `[DATASET].[TABLE_NAME]`
OMIT RECORD IF NOT SOME(profile.column.name = "gender" AND profile.column.cell.value = "male")
OR NOT SOME(profile.column.name = "age" AND INTEGER(profile.column.cell.value) > 30);

A consulta de dados será menos desafiadora, se gender e age forem expostos como subcampos. Para isso, liste gender e age como colunas nomeadas no grupo de colunas profile ao definir a tabela. Também é possível instruir o BigQuery a expor os valores mais recentes desse grupo de colunas desde então. Normalmente, somente o valor mais recente, e possivelmente o único, é de interesse.

Depois de expor as colunas como subcampos, a consulta SQL padrão para contar o número de usuários do sexo masculino com mais de 30 anos será:

SELECT COUNT(1) FROM `[DATASET].[TABLE_NAME]`
WHERE profile.gender.cell.value="male" AND profile.age.cell.value > 30;

Observe agora que gender e age são referenciados diretamente como campos. A configuração JSON para essa definição é:

      "bigtableOptions": {
        "readRowkeyAsString": "true",
        "columnFamilies": [
          {
              "familyId": "profile",
              "onlyReadLatest": "true",
              "columns": [
                  {
                      "qualifierString": "gender",
                      "type": "STRING"
                  },
                  {
                      "qualifierString": "age",
                      "type": "INTEGER"
                  }
              ]
          }
        ]
      }
    

Codificação de valor

O Cloud Bigtable armazena os dados como bytes brutos, independentes da codificação de dados. No entanto, os valores de bytes têm uso limitado nas análises de consultas SQL. O Cloud Bigtable oferece dois tipos básicos de decodificação escalar: texto e binária do HBase.

O formato de texto considera que todos os valores são armazenados como strings de texto alfanuméricas. Por exemplo, o número inteiro 768 será armazenado como a string "768". A codificação binária considera que a classe de métodos Bytes.toBytes do HBase foi usada para codificar os dados e aplica o método de decodificação apropriado.

Filtros da consulta

As consultas com filtro de igualdade de linha leem somente a linha específica. Por exemplo, na sintaxe SQL padrão:

SELECT COUNT(follows.column.name) FROM `[DATASET].[TABLE_NAME]` WHERE rowkey = "alice";

Filtros de intervalo, como rowkey > '1' e rowkey < '8', também são aceitos, mas somente quando a rowkey é lida como uma string com a opção readRowkeyAsString.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.