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, preenchido de maneira esparsa, que é capaz de se expandir a bilhões de linhas, milhares de colunas e petabytes de dados. O Cloud Bigtable tem um modelo de dados parecido com o do 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:

  • bigquery.dataViewer acesso ao conjunto de dados que contém a tabela externa.
  • bigquery.user acesso no nível do projeto ou superior para executar jobs de consulta.
  • bigtable.reader acesso 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 uma conta de serviço e essa conta acessar uma tabela externa vinculada a uma fonte de dados do Cloud Bigtable, será preciso adicionar o escopo de acesso a dados somente leitura do Cloud Bigtable (https://www.googleapis.com/auth/bigtable.data.readonly) à instância. 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:

  • Crie um arquivo de definição de tabela (para a CLI ou a API).
  • Crie 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 clique em Criar nova tabela.

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

    • Para Local, selecione Google Cloud Bigtable e, no campo de origem, insira o URI do Cloud Bigtable no formato a seguir: https://googleapis.com/bigtable/projects/project_id/instances/instance_id/tables/table_name. Em que project_id é o projeto que contém sua 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, todas as famílias de colunas serão incluídas 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.

Após a criação da tabela permanente, você poderá realizar uma consulta na tabela como se ela fosse uma tabela nativa do BigQuery, sujeita aos limites das 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
    

    Em que:

    • definition_file é o caminho para o arquivo de definição de tabela em sua máquina local.
    • dataset é o nome do conjunto de dados que contém a tabela.
    • table é o nome da tabela que você está criando.

    Depois disso, você pode realizar uma consulta na tabela como se ela fosse uma tabela nativa do BigQuery, sujeita às limitações em fontes de dados externas.

API

  • Para a propriedade sourceUris no recurso da tabela, é possível especificar exatamente um URI do Cloud Bigtable, que precisa ser um URL HTTPS válido e totalmente especificado.

  • Especifique as propriedades do formato de dados definindo a propriedade sourceFormat. Para o Cloud Bigtable, especifique "BIGTABLE".

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 de tabela, insira o comando bq query com a sinalização --external_table_definition.

(Opcional) Forneça a sinalização --location e defina o valor como seu local.

bq --location=location query \
--use_legacy_sql=false \
--external_table_definition=table::definition_file \
'query'

Em que:

  • location é o nome do seu local. A sinalização --location é opcional.
  • table é o nome da tabela temporária que você está criando.
  • definition_file é o caminho para o arquivo de definição de tabela em sua 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 query \
--use_legacy_sql=false \
--external_table_definition=follows::/tmp/follows_def \
'SELECT
  COUNT(rowkey)
 FROM
   follows'

API

  • Crie uma consulta. Consulte Como consultar dados para informações sobre como criar um job de consulta.

  • (Opcional) Especifique seu local na propriedade location na seção jobReference do recurso de job.

  • Especifique as propriedades da fonte de dados externa definindo ExternalDataConfiguration para o recurso de tabela.

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`
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`
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 um 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`
WHERE
  rowkey = "alice";

Filtros de intervalo, como rowkey > '1' e rowkey < '8', também são aceitos, mas somente quando rowkey é lido 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.