Consultas federadas do Cloud SQL

Nesta página, descrevemos como consultar dados no BigQuery e no Cloud SQL com uma consulta federada.

Visão geral

Dados costumam ficar espalhados em muitos lugares. É possível ter uma tabela de clientes armazenada no BigQuery e uma tabela de vendas armazenada no Cloud SQL e querer unir as duas em uma única consulta.

A federação BigQuery Cloud SQL permite que o BigQuery consulte dados que residem no Cloud SQL em tempo real, sem copiar ou mover dados. Ele aceita as instâncias do MySQL (segunda geração) e do PostgreSQL no Cloud SQL.

Após a configuração única inicial, é possível escrever uma consulta com a nova função SQL EXTERNAL_QUERY().

Fluxo de trabalho

Sintaxe da consulta federada

A consulta federada introduz uma função nova: EXTERNAL_QUERY.

Sintaxe

SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query);
  • connection_id (string): o nome do recurso de conexão do banco de dados que você cria na IU da Web, na CLI ou na API.

    Exemplo de ID da conexão bigquery-federation-test.us.test-mysql

  • external_database_query (string): uma consulta somente leitura no dialeto SQL do banco de dados externo (MySQL ou PostgreSQL). A consulta é executada no banco de dados externo no Cloud SQL.

Descrição

EXTERNAL_QUERY executa a consulta no Cloud SQL e retorna resultados como uma tabela temporária. O tipo de dados do banco de dados de origem (MySQL ou PostgreSQL) é convertido em tipo de dados do BigQuery na tabela de resultados temporários com o seguinte mapeamento de tipo de dados. A função EXTERNAL_QUERY é normalmente usada em uma cláusula FROM. Essa função só está disponível no SQL padrão do BigQuery.

Tipo de retorno

Uma tabela do BigQuery.

Exemplo de consulta

Imagine que você precise da data do primeiro pedido de cada um de seus clientes para incluir no relatório que descrevemos na Visão geral. No momento, esses dados não estão no BigQuery, mas estão disponíveis no banco de dados PostgreSQL operacional no Cloud SQL. O exemplo de consulta federada a seguir faz isso.

SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
  'connection_id',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

A consulta de exemplo inclui três partes:

  1. Executar a consulta externa SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id no banco de dados PostgreSQL operacional para conseguir a primeira data de pedido de cada cliente por meio da função EXTERNAL_QUERY().
  2. Mesclar a tabela de resultados de consultas externas com a tabela de clientes no BigQuery por customer_id.
  3. Selecionar as informações do cliente e a data do primeiro pedido.

O pedido não é preservado

EXTERNAL_QUERY() não honrará os pedidos do resultado da consulta externa, mesmo que ela inclua ORDER BY. A consulta de exemplo a seguir ordena linhas por ID do cliente no Cloud SQL, mas o BigQuery não exibe as linhas de resultado nesse pedido.

SELECT * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM customers AS c ORDER BY c.customer_id'');

Antes de começar

Ativar o serviço de conexão do BigQuery

  • Abra a página da API BigQuery Connection na biblioteca de APIs.
  • No menu suspenso, selecione o projeto que contém a instância do Cloud SQL.
  • Clique no botão ATIVAR.

Conta de serviço

O BigQuery usa uma conta de serviço para se conectar à sua instância do Cloud SQL. Quando você ativa a API de conexão do BigQuery, uma conta de serviço do IAM gerenciada pelo GCP é criada automaticamente em seu nome. A conta de serviço tem os papéis a seguir:

Papel Descrição
cloudsql.client Conexão com uma instância do Cloud SQL
logging.logWriter Gravação no cloud-logging
metrics.metricWriter Gravação no cloud-monitoring

Permissões

  • Para criar e manter um recurso de conexão, o usuário precisa ter o papel do IAM predefinido bigquery.admin.

  • O papel bigquery.admin inclui as seguintes permissões do serviço de conexão do BigQuery:

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete

Para conceder permissões a outro usuário para que ele possa usar o recurso de conexão em consultas do Cloud SQL, consulte Como conceder permissões a outro usuário.

Como conceder o acesso bigquery.admin

Para conceder o papel bigquery.admin a um usuário ou grupo do Google:

Console

  1. Abra a página do Cloud IAM no Console do GCP.

    Abrir a página do IAM

  2. Clique em Selecione um projeto.

  3. Selecione um projeto e clique em Abrir.

  4. Clique em Adicionar para incluir novos membros no projeto e defina as permissões deles.

  5. Na caixa de diálogo Adicionar membros:

    • Em Membros, insira o endereço de e-mail do usuário ou grupo.
    • Na lista suspensa Selecionar um papel, clique em BigQuery > Administrador do BigQuery.
    • Clique em Adicionar.

      Conceder papel de administrador

CLI

É possível usar a ferramenta de linha de comando gcloud para conceder o papel bigquery.admin a um usuário ou grupo.

Para adicionar uma única vinculação à política do Cloud IAM do seu projeto, digite o comando a seguir. Para incluir um usuário, forneça a sinalização --member no formato user:user@example.com. Para incluir um grupo, forneça a sinalização --member no formato group:group@example.com.

gcloud projects add-iam-policy-binding project_id \
--member group/user:address \
--role roles/bigquery.admin

Em que:

  • project_id é o ID do projeto;
  • group/user é group ou user;
  • address é o endereço de e-mail do usuário ou do grupo.

Por exemplo:

gcloud projects add-iam-policy-binding myproject \
--member group:group@example.com \
--role roles/bigquery.admin

O comando mostra a política atualizada:

    bindings:
    - members:
      - group:group@example.com
        role: roles/bigquery.admin
    

Para mais informações sobre os papéis do Cloud IAM no BigQuery, consulte Controle de acesso.

IP público

A federação BigQuery Cloud SQL só aceita instâncias do Cloud SQL com conectividade de IP público. Configure a conectividade do IP público para sua instância do Cloud SQL.

Como configurar conexões do banco de dados do Cloud SQL

Para evitar a gravação de credenciais de banco de dados como texto simples (em inglês) em uma consulta federada, é necessário primeiro criar um recurso de conexão de banco de dados por banco de dados no BigQuery e, em seguida, referenciar o recurso de conexão na consulta federada.

O recurso de conexão tem um conjunto de permissões do IAM, que pode ser concedido a outros usuários. O recurso de conexão é criptografado e armazenado com segurança no serviço de conexão do BigQuery e só pode ser usado para consultas federadas.

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Controle de acesso.

Criar um recurso de conexão

Console

  1. Para criar um recurso de conexão, acesse a IU da Web do BigQuery.

    Acessar a IU da Web do BigQuery

  2. Em +ADICIONAR DADOS, selecione Criar conexão no menu.

    Criar recurso de conexão

  3. No painel Criar conexão:

    • Em Tipo de conexão, selecione MySQL ou PostgresSQL.
    • Em ID da conexão, insira um identificador para o recurso de conexão. Letras, números e sublinhados são permitidos.
    • Em Local da conexão, selecione o local da instância do Cloud SQL com as exceções abaixo: para a instância do Cloud SQL na região us-central1, selecione a localização dos EUA, para a região europe-west1, selecione a localização da UE.
    • (Opcional) Em Nome amigável, insira um nome fácil de usar para a conexão, como My connection resource. O nome amigável pode ser qualquer valor que permita identificar facilmente o recurso de conexão se você precisar modificá-lo mais tarde.
    • (Opcional) Em Descrição, insira uma descrição para este recurso de conexão.
    • Em ID da instância do Cloud SQL, insira o nome completo da instância do Cloud SQL, geralmente no formato project-id:location-id:instance-id. Encontre o ID da instância na página de detalhes da instância do Cloud SQL que você quer consultar.
    • Em Nome do banco de dados, insira o nome do banco de dados.
    • Em Nome de Usuário, insira o nome de usuário para o banco de dados.
    • Em Senha, insira a senha do banco de dados.

      • (Opcional) Marque Mostrar senha para revelar a senha.

      Novo recurso de conexão

  4. Clique em Criar conexão.

LINHA DE COMANDO

Insira o comando bq mk e forneça a sinalização de conexão: --connection. As sinalizações abaixo também são obrigatórias:

  • --connection_type
  • --properties
  • --connection_credential
  • --project_id
  • --location
  • (nome da conexão)

    bq mk --connection --connection_type='CLOUD_SQL' --properties=[PROPERTIES] --connection_credential=[CREDENTIALS] --project_id=[PROJECT_ID] --location=[LOCATION] new_connection
    

Em que:

  • --connection_type é sempre CLOUD_SQL;
  • --properties contém os parâmetros para a conexão criada no formato JSON. Por exemplo: --properties='{"param":"param_value"}'. Para criar um recurso de conexão, forneça os parâmetros instanceID, database e type. Os parâmetros friendly_name e description são opcionais;
  • --connection_credential precisa conter os parâmetros username e password;
  • --project_id é o ID do seu projeto;
  • --location é a região em que sua instância do Cloud SQL está localizada;
  • Insira um nome para identificar a conexão, usando apenas letras, números e sublinhados.

Por exemplo, o comando a seguir cria um novo recurso de conexão denominado my_new_connection (nome amigável: "My new connection") em um projeto com o código federation-test.

bq mk --connection --connection_type='CLOUD_SQL' --properties='{"instanceId":"federation-test:us-central1:mytestsql","database":"mydatabase","type":"MYSQL"}' --connection_credential='{"username":"myusername", "password":"mypassword"}' --project_id=federation-test --location=us my_new_connection

API

Use o método projects.locations.connections.create e forneça uma instância do recurso connection. Consulte a documentação de referência: API REST.

Como visualizar recursos de conexão

Console

  1. Para visualizar o status de seus recursos de conexão, acesse a IU da Web do BigQuery.

    Acessar a IU da Web do BigQuery

  2. Os recursos de conexão serão listados no nível superior do projeto, em um grupo denominado Conexões externas.

  3. Clique em uma conexão para ver informações sobre esse recurso de conexão, como connection ID e Cloud SQL instance ID.

    Ver recursos de conexão

LINHA DE COMANDO

Insira o comando bq show e forneça a sinalização de conexão: --connection. O connection_id totalmente qualificado é obrigatório.

    bq show --connection project:location.connection_id

Por exemplo, o comando a seguir cria um novo recurso de conexão denominado my_new_connection em um projeto com o código federation-test localizado na região us.

    bq show --connection federation-test:us.my_new_connection

API

Use o método projects.locations.connections.list e forneça uma instância do recurso list. Consulte a seção de referência API REST.

Como conceder permissões a outro usuário

Para outro usuário utilizar o recurso de conexão para consultas federadas do Cloud SQL, o usuário bigquery.admin precisa conceder o seguinte papel no IAM: BigQuery Connection User. Esse papel do IAM inclui as permissões a seguir:

  • bigquery.connections.get
  • bigquery.connections.list
  • bigquery.connections.use
  • bigquery.connections.getIamPolicy

O usuário bigquery.admin também pode conceder outro papel a outros usuários, denominado BigQuery Connection Admin, que inclui todas as mesmas permissões que BigQuery Connection User, além de outras permissões para criar, atualizar e excluir conexões existentes, além de definir políticas do IAM em conexões.

  • bigquery.connections.create
  • bigquery.connections.update
  • bigquery.connections.setIamPolicy
  • bigquery.connections.delete

Preços

Na consulta do Cloud SQL pelo BigQuery, a cobrança é aplicada pelo número de bytes lidos. Para mais informações, consulte Preços de consultas. Não há cobranças ou cotas extras para consultas federadas do Cloud SQL durante o período Beta.

Referência

Visualizar um esquema de tabela do Cloud SQL

É possível usar a função EXTERNAL_QUERY() para consultar tabelas information_schema para acessar os metadados do banco de dados, como listar todas as tabelas no banco de dados ou mostrar o esquema da tabela. As consultas information_schema de exemplo a seguir funcionam tanto no MySQL quanto no PostgreSQL. Saiba mais em Tabelas information_schema do MySQL e Tabelas information_schema do PostgreSQL (ambos em inglês).

// List all tables in a database
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.tables;");
// List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.columns where table_name='x';");

Detalhe do recurso de conexão

Nome da propriedade Valor Descrição
name string Nome do recurso de conexão no formato: project_id.location_id.connection_id
location string Local da conexão, que é o mesmo do local da instância do Cloud SQL com as seguintes exceções: mapas us-central1 do Cloud SQL para o BigQuery nos EUA, mapas europe-west1 do Cloud SQL para o BigQuery na UE.
friendlyName string Um nome de exibição fácil de usar para a conexão
description string Descrição da conexão
cloudSql.type string Pode ser "POSTGRES" ou "MYSQL"
cloudSql.instanceId string Nome da instância do Cloud SQL, geralmente no formato de:

Project-id:location-id:instance-id

É possível encontrar o ID da instância na página de detalhes Instância do Cloud SQL.
cloudSql.database string O banco de dados do Cloud SQL ao qual você quer se conectar

Detalhes do recurso de credencial de conexão

Nome da propriedade Valor Descrição
username string Nome de usuário do banco de dados
password string Senha do banco de dados

Mapeamentos de tipo de dados

Quando você executa uma consulta federada do Cloud SQL, os dados do Cloud SQL (nos tipos de dados MySQL ou PostgreSQL) são convertidos em tipos SQL padrão do BigQuery. Veja abaixo os mapeamentos de tipos de dados do MySQL para o BigQuery e do PostgreSQL para o BigQuery.

O que saber sobre mapeamentos:

  • A maioria dos tipos de dados MySQL pode ser correspondida ao mesmo tipo de dados do BigQuery, com algumas exceções, como decimal, timestamp e time.
  • O PostgreSQL aceita muitos tipos de dados não padrão que não são aceitos no BigQuery. Por exemplo, money, path, uuid, boxer e outros.
  • O intervalo de valores numéricos do BigQuery é menor que no MySQL e no PostgreSQL.

Tratamento de erros

Se a consulta externa contiver um tipo de dados não aceito no BigQuery, a consulta falhará imediatamente. É possível converter o tipo de dados não aceito em um tipo de dados MySQL/PostgreSQL diferente que seja compatível. Consulte Tipos de dados não compatíveis em Como solucionar problemas para mais informações sobre como fazer a conversão.

Mapeamento de tipo MySQL para BigQuery

Tipo do MySQL Descrição do MySQL Tipo do BigQuery Diferença entre os tipos
Número inteiro
INT 4 bytes, 2^32 - 1 INT64
TINYINT 1 byte, 2^8 - 1 INT64
SMALLINT 2 bytes, 2^16 - 1 INT64
MEDIUMINT 3 bytes, 2^24 - 1 INT64
BIGINT 8 bytes, 2^64 - 1 INT64
UNSIGNED BIGINT 8 bytes, 2^64 - 1 NUMERIC
Numérico exato
DECIMAL (M,D) Um decimal é representado por (M,D), em que M é o número total de dígitos e D é o número de decimais. M <= 65 NUMERIC

O intervalo NUMERIC do BigQuery é menor, aceita apenas 38 dígitos decimais de precisão e 9 dígitos decimais de escala.
Numérico aproximado
FLOAT (M,D) 4 bytes, M <= 23 FLOAT64
DOUBLE (M,D) 8 bytes, M <= 53 FLOAT64
Data e hora
TIMESTAMP '1970-01-01 00:00:01'UTC a '2038-01-19 03:14:07' UTC. TIMESTAMP O TIMESTAMP do MySQL é recuperado como fuso horário UTC, não importa de onde o usuário chame o BigQuery
DATETIME '1000-01-01 00:00:00' a '9999-12-31 23:59:59' DATETIME
DATE '1000-01-01' a '9999-12-31'. DATE
TIME Hora no formato 'HH:MM:SS'
'-838:59:59' a '838:59:59'.
TIME
O intervalo TIME do BigQuery é menor, de 00:00:00 a 23:59:59
YEAR INT64
Caractere e strings
ENUM Objeto string com um valor escolhido em uma lista de valores permitidos. STRING
CHAR (M) Uma string de comprimento fixo entre 1 e 255 caracteres. STRING
VARCHAR (M) Uma string de comprimento variável entre 1 e 255 caracteres. STRING
TEXT Um campo com comprimento máximo de 65535 caracteres. STRING
TINYTEXT Coluna TEXT com comprimento máximo de 255 caracteres. STRING
MEDIUMTEXT Coluna TEXT com comprimento máximo de 16777215 caracteres. STRING
LONGTEXT Coluna TEXT com comprimento máximo de 4294967295 caracteres. STRING
Binário
BLOB Um objeto grande binário com comprimento máximo de 65535 caracteres. BYTE
MEDIUM_BLOB Um BLOB com comprimento máximo de 16777215 caracteres. BYTE
LONG_BLOB Um BLOB com comprimento máximo de 4294967295 caracteres. BYTE
TINY_BLOB Um BLOB com comprimento máximo de 255 caracteres. BYTE
Outro
SET Quando declarar a coluna SET, predefina alguns valores. Em seguida, INSIRA qualquer conjunto de valores predefinidos nesta coluna. STRING
GEOMETRY GEOMETRY INCOMPATÍVEL
BIT INT64 INCOMPATÍVEL

Mapeamento de tipo PostgresSQL a BigQuery

Nome Descrição Tipo do BigQuery Diferença entre os tipos
Número inteiro
smallint 2 bytes, -32768 a +32767 INT64
smallserial Consulte smallint INT64
integer 4 bytes, -2147483648 a +2147483647 INT64
serial Consulte integer INT64
bigint 8 bytes, -9223372036854775808 a 9223372036854775807 INT64
bigserial Consulte bigint INT64
Numérico exato
numeric [ (p, s) ] Precisão de até 1.000. NUMERIC O intervalo NUMERIC do BigQuery é menor, aceita apenas 38 dígitos decimais de precisão e 9 dígitos decimais de escala.
Decimal [ (p, s) ] Consulte numeric NUMERIC Consulte numeric
money 8 bytes, escala de 2 dígitos, -92233720368547758,08 a +92233720368547758,07 INCOMPATÍVEL
Numérico aproximado
real 4 bytes, número de ponto flutuante de precisão única FLOAT64
double precision 8 bytes, número de ponto flutuante de precisão dupla FLOAT64
Data e hora
date data do calendário (ano, mês, dia) DATE
time [ (p) ] [ without time zone ] hora do dia (sem fuso horário) TIME
time [ (p) ] with time zone hora do dia, incluindo fuso horário INCOMPATÍVEL
timestamp [ (p) ] [ without time zone ] data e hora (sem fuso horário) DATETIME
timestamp [ (p) ] with time zone data e hora, incluindo fuso horário TIMESTAMP O TIMESTAMP do PostgreSQL é recuperado como fuso horário UTC, não importa de onde o usuário chame o BigQuery
interval Uma duração de tempo INCOMPATÍVEL
Caractere e strings
character [ (n) ] string de caracteres com comprimento fixo STRING
character varying [ (n) ] string de caracteres com comprimento variável STRING
text string de caracteres com comprimento variável STRING
Binário
bytea dados binários ("matriz de bytes") BYTES
bit [ (n) ] string de bits com comprimento fixo BYTES
bit varying [ (n) ] string de bits com comprimento variável BYTES
Outro
boolean booleano lógico (verdadeiro/falso) BOOL
inet Endereço de host IPv4 ou IPv6 INCOMPATÍVEL
path caminho geométrico em um plano INCOMPATÍVEL
pg_lsn número de sequência de registro do PostgreSQL INCOMPATÍVEL
point ponto geométrico em um plano INCOMPATÍVEL
polygon caminho geométrico fechado em um plano INCOMPATÍVEL
tsquery consulta de pesquisa de texto INCOMPATÍVEL
tsvector documento de pesquisa de texto INCOMPATÍVEL
txid_snapshot snapshot do código da transação no nível do usuário INCOMPATÍVEL
uuid identificador universalmente exclusivo INCOMPATÍVEL
xml dados XML STRING
box caixa retangular em um plano INCOMPATÍVEL
cidr endereço de rede IPv4 ou IPv6 INCOMPATÍVEL
circle círculo em um plano INCOMPATÍVEL
interval [ fields ] [ (p) ] período INCOMPATÍVEL
json dados JSON textuais STRING
jsonb dados JSON binários, decompostos INCOMPATÍVEL
line linha infinita em um plano INCOMPATÍVEL
lseg segmento de linha em um plano INCOMPATÍVEL
macaddr endereço MAC (controle de acesso à mídia) INCOMPATÍVEL
macaddr8 endereço MAC (controle de acesso à mídia) (formato EUI-64) INCOMPATÍVEL

Limitações e problemas conhecidos

Regiões

As consultas federadas do Cloud SQL são aceitas apenas em regiões compatíveis com o Cloud SQL e o BigQuery. A federação de consulta é compatível com todas as regiões do BigQuery, mas não com todas as regiões do Cloud SQL.

É possível executar uma consulta federada entre regiões, de acordo com as regras a seguir.

Multirregiões

Uma multirregião do BigQuery pode consultar qualquer região do Cloud SQL no mesmo local (US, EU). Por exemplo:

  • A multirregião US do BigQuery pode consultar as regiões us-central1, us-east1, us- east4 e us-west1 do Cloud SQL, e assim por diante.
  • A multirregião EU do BigQuery pode consultar as regiões europe-north1 e europe-west1 do Cloud SQL, e assim por diante.

Regiões únicas

Uma região única do BigQuery só pode consultar o Cloud SQL na mesma região. Por exemplo:

  • A região us-east1 do BigQuery só pode consultar us-east1 do Cloud SQL.

O BigQuery e o Cloud SQL estão disponíveis nas mesmas regiões deste Beta, mas algumas regiões não são aceitas. Consulte a tabela a seguir para um mapeamento detalhado.

Região do Cloud SQL Multirregião/região do BigQuery
northamerica-northeast1 US/Northamerica-northeast1
us-central INCOMPATÍVEL: essa região da instância do Cloud SQL é V1.
A consulta federada é aceita apenas com a instância V2.
us-central1 US
us-east1 US
us-east4 US/us-east4
us-west1 US
us-west2 US/us-west2
southamerica-east1 southamerica-east1
europe-north1 EU/europe-north1
europe-west1 EU
europe-west2 EU/europe-west2
europe-west3 EU
europe-west4 EU
europe-west6 EU/europe-west6
asia-east1 INCOMPATÍVEL
asia-east2 asia-east2
asia-northeast1 asia-northeast1
asia-south1 asia-south1
asia-southeast1 asia-southeast1
australia-southeast1 australia-southeast1

Cotas e outros limites

  • Desempenho: uma consulta federada provavelmente não será tão rápida quanto consultar somente o armazenamento do BigQuery. O BigQuery precisa esperar que o banco de dados de origem execute a consulta externa e mova temporariamente os dados do Cloud SQL para o BigQuery. Bases de dados de origem como MySQL ou PostgreSQL geralmente não são otimizadas para consultas analíticas complexas.
  • Cota: os usuários precisam controlar a cota de consulta no Cloud SQL. Não há configuração de cota extra para consultas federadas. Para conseguir isolamento da carga de trabalho, recomenda-se consultar apenas uma réplica de leitura do banco de dados.
  • Número máximo de bytes faturados permitido: no momento, este campo não é compatível com consultas federadas. O cálculo dos bytes faturados antes de executar realmente as consultas federadas não é possível no momento.
  • Instâncias limitadas do Cloud SQL: a consulta federada é aceita apenas pela instância do Cloud SQL v2 com IP público (em comparação com o IP privado).
  • Sujeito às cotas e limitações para MySQL e PostgreSQL do Cloud SQL.
  • Número de conexões: uma consulta federada pode ter no máximo 10 conexões exclusivas.

Como solucionar problemas

Nesta seção ajudaremos você a solucionar os problemas mais comuns encontrados ao configurar uma conexão. Neste documento, não englobamos todas as mensagens de erro ou problemas possíveis.

Problemas gerais

Ao fazer o diagnóstico de problemas gerais de conexão, verifique os itens a seguir:

  • Verifique se você concluiu todas as etapas na seção "Antes de começar" da página da documentação para sua conexão.
  • As propriedades de configuração da conexão estão corretas.

Se sua configuração de conexão estiver correta e as permissões apropriadas foram concedidas, consulte as soluções a seguir para problemas comuns encontrados.

Problema: o BigQuery e o Cloud SQL não compartilham o mesmo local.
Resolução: a consulta federada do Cloud SQL é aceita apenas em regiões compatíveis com o Cloud SQL e o BigQuery. O conjunto de dados do BigQuery e a instância do Cloud SQL precisam estar na mesma região, ou no mesmo local se o conjunto de dados estiver em um local com várias regiões, como US e EU. Consulte Limitações e problemas conhecidos para mais informações sobre regiões.
Problema: o desempenho está mais lento que o esperado.
Resolução: o desempenho das consultas federadas não é tão bom quanto consultar dados armazenados no BigQuery, porque a consulta federada precisa consultar externamente o Cloud SQL, retornar os dados a uma tabela temporária do BigQuery, mapear os dados para o tipo de dados do BigQuery e executar a consulta no BigQuery. A vantagem é que, embora a consulta não tenha um desempenho tão alto, os dados não precisam ser copiados, movidos ou armazenados novamente.
Problema: como formatar o nome da conexão?
Resolução: o nome da conexão precisa incluir projeto, local e código da conexão. O nome da conexão precisa estar de acordo com este padrão: project_id.location_id.connection_id Por exemplo: federation-test.us.my_new_connection

Tipos de dados não compatíveis

Se a consulta externa contiver um tipo de dados não aceito no BigQuery, a consulta falhará imediatamente. É possível converter o tipo de dados não aceito em um tipo diferente de dados MySQL/PostgreSQL que seja compatível.

  • Tipo de dados MySQL incompatível

    • Mensagem de erro: Invalid table-valued function external_query Found unsupported MySQL type in BigQuery. at [1:15]
    • Tipo incompatível: GEOMETRY, BIT
    • Resolução: converta o tipo de dados não compatível em STRING.
    • Exemplo: SELECT ST_AsText(ST_GeomFromText('POINT(1 1)')); Este comando converte o tipo de dados incompatível GEOMETRY em STRING.
  • Tipo de dados PostgresSQL incompatível

    • Mensagem de erro: Invalid table-valued function external_query Postgres type (OID = 790) is not supported now at [1:15]
    • Tipo incompatível: money, time with time zone, inet, path, pg_lsn, point, polygon, tsquery, tsvector, txid_snapshot, uuid, box, cidr, circle, interval, jsonb, line, lseg, macaddr, macaddr8
    • Resolução: converta o tipo de dados não compatível em STRING.
    • Exemplo: SELECT CAST('12.34'::float8::numeric::money AS varchar(30)); Este comando converte o tipo de dados incompatível money em string.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

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