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
- Escolha um projeto do Google Cloud que inclua a instância do Cloud SQL que você quer consultar.
- Um usuário
bigquery.admin
cria um recurso de conexão no BigQuery. - O usuário administrador concede permissão para usar o recurso de conexão
para o usuário B.
- Se o administrador e o usuário B forem a mesma pessoa, não será necessário conceder permissão.
- O usuário B cria uma consulta no BigQuery com a
nova função
EXTERNAL_QUERY()
.
Sintaxe da consulta federada
A consulta federada introduz uma nova função: 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ê criar no Console do Cloud, na ferramenta de linha de comando
bq
ou na API BigQuery.Exemplo de código 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:
- 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çãoEXTERNAL_QUERY()
. - Mesclar a tabela de resultados de consultas externas com a tabela de clientes no BigQuery por
customer_id
. - 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 * FROM 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 BigQuery Connection, uma conta de serviço de gerenciamento de identidade e acesso (IAM) gerenciada pelo Google Cloud é 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 Compartilhar um recurso de conexão.
Como conceder acesso bigquery.admin
Para conceder o papel bigquery.admin
:
Console
Abra a página do IAM no Console do Cloud.
Clique em Selecione um projeto.
Selecione um projeto e clique em Abrir.
Clique em Adicionar para incluir novos membros no projeto e defina as permissões deles.
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.
gcloud
É possível usar a ferramenta de linha de comando gcloud
para conceder a um usuário ou grupo o
papel bigquery.admin
.
Para adicionar uma única vinculação à política do IAM do 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
ouuser
. - 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
A política atualizada é exibida:
bindings: - members: - group:group@example.com role: roles/bigquery.admin
Para mais informações sobre os papéis do IAM no BigQuery, consulte Papéis e permissões predefinidos.
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. Esse recurso é 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 Papéis e permissões predefinidos.
Criar um recurso de conexão
Console
Para criar um recurso de conexão, acesse a página do BigQuery no Console do Cloud.
No menu
Adicionar dados, selecione Fonte de dados externa.No painel Fonte de dados externa, insira as seguintes informações:
- Em Tipo de conexão, selecione MySQL ou Postgres.
- 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 um local (ou região) do BigQuery compatível com a região da instância do Cloud SQL.
- (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 ajude você a identificar o recurso de conexão se 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.
Clique em Criar conexão.
bq
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
--connection_type
é sempreCLOUD_SQL
--properties
--connection_credential
--project_id
--location
Um nome para a conexão. Insira um nome para identificar a conexão, usando apenas letras, números e sublinhados.
bq mk --connection --connection_type='CLOUD_SQL' --properties=PROPERTIES --connection_credential=CREDENTIALS --project_id=PROJECT_ID --location=LOCATION new_connection
Substitua:
PROPERTIES
: os parâmetros da conexão criada no formato JSON. Por exemplo,--properties='{"param":"param_value"}'
. Para criar um recurso de conexão, é necessário fornecer os parâmetrosinstanceID
,database
etype
. Os parâmetrosfriendly_name
edescription
são opcionais.CREDENTIALS
: os parâmetrosusername
epassword
.PROJECT_ID
: o ID do projeto;LOCATION
: a região em que a instância do Cloud SQL está localizada.
Por exemplo, o comando abaixo cria um novo recurso de conexão chamado my_new_connection (nome amigável: "Minha nova conexão") em um projeto com o ID 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
Na API do BigQuery Connection, é possível invocar CreateConnection
no ConnectionService
para instanciar uma conexão. Consulte a página da biblioteca de cliente para mais detalhes.
Java
Antes de testar essa amostra, siga as instruções de configuração para Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Solução de problemas
Esta seção resolve problemas que podem ocorrer durante a configuração de uma nova conexão. Neste documento, não englobamos todas as mensagens de erro ou problemas possíveis.
Ao fazer o diagnóstico de problemas gerais de conexão, verifique os itens a seguir:
- Você concluiu todas as etapas na seção Antes de começar.
- As propriedades de configuração da conexão estão corretas.
- Você tem as permissões apropriadas para criar uma conexão.
Se as propriedades da conexão estiverem corretas e as permissões apropriadas forem concedidas, consulte as seguintes soluções para problemas comuns.
- 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 em um local multirregional, como
US
eEU
, na mesma área geográfica compatível com a região do Cloud SQL. Consulte Regiões compatíveis para mais informações sobre regiões e compatibilidade de regiões. - Problema: a conexão recém-criada não está aparecendo no projeto.
- Solução: pode haver um pequeno atraso até que as novas conexões apareçam no Console do Cloud. Alterne para um projeto diferente, aguarde até 30 segundos e retorne. Sua nova conexão será exibida.
- 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. Embora o desempenho da consulta não seja 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 código de conexão precisa estar em conformidade com este padrão:
project_id.location_id.connection_id
, por exemplo,federation-test.us.my_new_connection
Como gerenciar recursos de conexão
Para informações sobre como visualizar, listar, compartilhar, atualizar e excluir os recursos de conexão, consulte Como trabalhar com conexões.
Audit logging
Para registros de auditoria de recursos de conexão, consulte Visão geral dos registros de auditoria do BigQuery.
Regiões compatíveis
As consultas federadas do Cloud SQL são aceitas apenas em regiões compatíveis com o Cloud SQL e o BigQuery
Tipos de locais ou região
Há dois tipos de locais:
Uma região é um lugar geográfico específico, como Londres.
Um local multirregional é uma área geográfica grande, como Estados Unidos, que contém dois ou mais lugares geográficos.
É possível criar uma conexão e executar uma consulta federada nas regiões de acordo com as regras a seguir.
Multirregiões
Uma multirregião do BigQuery pode consultar qualquer região do Cloud SQL na mesma área geográfica (EUA, UE), por exemplo:
- A multirregião EUA do BigQuery pode consultar qualquer região única do
Cloud SQL na área geográfica dos EUA, como
us-central1
,us-east4
,us-west2
e assim por diante. - A multirregião UE do BigQuery pode consultar qualquer região única do
Cloud SQL em estados-membros
da União Europeia, como
europe-north1
,europe-west3
e assim por diante. - A conexão usada na consulta precisa residir no
mesmo local que a consulta. Por exemplo, as consultas executadas na multirregião
US
precisam fazer referência a uma conexão localizada na multirregiãoUS
.
O local de processamento da consulta é o local multirregional, US
ou EU
.
Para mais informações sobre regiões e locais multirregionais, consulte a página Locais do conjunto de dados.
Regiões únicas
Uma região única do BigQuery só pode consultar o Cloud SQL na mesma região. Por exemplo:
- A região única
us-east4
do BigQuery só pode consultar o Cloud SQL emus-east4
.
Neste exemplo, o local de processamento da consulta é a região única do BigQuery.
Consulte a tabela a seguir para um mapeamento detalhado das regiões compatíveis com cada produto.
Locais regionais
Descrição da região | Região do Cloud SQL | Região compatível com o BigQuery | Multirregião compatível com o BigQuery | |
---|---|---|---|---|
América | ||||
Iowa | us-central |
Incompatível: essa região da instância do Cloud SQL é V1. As consultas federadas são compatíveis apenas com instâncias V2 do Cloud SQL. |
||
Iowa | us-central1 |
Incompatível | US |
|
Las Vegas | us-west4 |
us-west4 |
US |
|
Los Angeles | us-west2 |
us-west2 |
US |
|
Montreal | northamerica-northeast1 |
northamerica-northeast1 |
US |
|
Virgínia do Norte | us-east4 |
us-east4 |
US |
|
Oregon | us-west1 |
us-west1 |
US |
|
Salt Lake City | us-west3 |
us-west3 |
US |
|
São Paulo | southamerica-east1 |
southamerica-east1 |
||
Carolina do Sul | us-east1 |
us-east1 |
US |
|
Europa | ||||
Bélgica | europe-west1 |
europe-west1 |
EU |
|
Finlândia | europe-north1 |
europe-north1 |
EU |
|
Frankfurt | europe-west3 |
europe-west3 |
EU |
|
Londres | europe-west2 |
europe-west2 |
EU |
|
Holanda | europe-west4 |
europe-west4 |
EU |
|
Zurique | europe-west6 |
europe-west6 |
EU |
|
Ásia-Pacífico | ||||
Hong Kong | asia-east2 |
asia-east2 |
||
Jacarta | asia-southeast2 |
asia-southeast2 |
||
Mumbai | asia-south1 |
asia-south1 |
||
Osaka | asia-northeast2 |
asia-northeast2 |
||
Seul | asia-northeast3 |
asia-northeast3 |
||
Singapura | asia-southeast1 |
asia-southeast1 |
||
Sydney | australia-southeast1 |
australia-southeast1 |
||
Taiwan | asia-east1 |
asia-east1 |
||
Tóquio | asia-northeast1 |
asia-northeast1 |
Locais multirregionais
Locais multirregionais não estão disponíveis para instâncias do Cloud SQL. As multirregiões do Cloud SQL não podem ser usadas para consultas federadas.
Os dados localizados na multirregião EU
não são armazenados nos data centers europe-west2
(Londres) ou europe-west6
(Zurique).
Limitações
Instâncias limitadas do Cloud SQL
A consulta federada só é compatível com a instância do Cloud SQL V2 com IP público (em vez de IP privado).
Desempenho
A consulta federada provavelmente não será tão rápida quanto consultar apenas 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.
As consultas externas são somente leitura
A consulta externa que será executada no banco de dados de origem precisa ser somente leitura. Portanto, as instruções DML ou DDL não são compatíveis.
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 ou 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ívelGEOMETRY
emSTRING
.
- Mensagem de erro:
Tipo de dados PostgreSQL não compatí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ívelmoney
emSTRING
.
- Mensagem de erro:
Cotas e limites
- Consulta federada entre regiões: se o local de processamento de consultas do BigQuery e o local da instância do Cloud SQL forem diferentes, essa será uma consulta entre regiões. É possível executar até 1 TB em consultas entre regiões por projeto por dia.
- Veja um exemplo de consulta entre regiões:
- A instância do Cloud SQL está em
us-west1
, enquanto a conexão do BigQuery é baseada na multirregiãoUS
. O local de processamento da consulta do BigQuery éUS
.
- A instância do Cloud SQL está em
- Veja um exemplo de consulta entre regiões:
- Cota: os usuários precisam controlar a cota de consultas 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.
- As cotas e limitações do Cloud SQL MySQL e PostgreSQL se aplicam.
- Número de conexões: uma consulta federada pode ter no máximo 10 conexões exclusivas.
Preço
Ao consultar o Cloud SQL no BigQuery, a cobrança é aplicada pelo número de bytes retornados da consulta externa. Para mais informações, consulte Preços de consulta.
Referência
Visualizar um esquema de tabela do Cloud SQL
É possível usar a função EXTERNAL_QUERY()
para consultar tabelas information_schema, acessar metadados de bancos de dados, como listar todas as tabelas no banco de dados ou mostrar esquemas de tabelas. 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.
-- 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 | O local da conexão, que é o mesmo do local da instância do Cloud SQL com as seguintes exceções: a região us-central1 do Cloud SQL é mapeada para o BigQuery nos EUA e a europe-west1 do Cloud SQL é mapeada 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 | O 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. Os mapeamentos de tipos de dados a seguir são 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
etime
. - 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. Para mais informações sobre como fazer a conversão, consulte Tipos de dados não compatíveis em Solução de problemas.
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, compatível com 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 você 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 fixo 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 | Uma coluna TEXT com comprimento máximo de 16.777.215 caracteres. | STRING | |
LONGTEXT | Uma coluna TEXT com comprimento máximo de 4.294.967.295 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_BLO | Um BLOB com comprimento máximo de 4294967295 caracteres. | BYTE | |
TINY_BLOB | Um BLOB com comprimento máximo de 255 caracteres. | BYTE | |
Binário | Uma string de comprimento fixo entre 1 e 255 caracteres. | BYTE | |
VARBINARY | Uma string de comprimento variável entre 1 e 255 caracteres. | BYTE | |
Outro | |||
SET | Ao declarar a coluna "SET", defina alguns valores. Em seguida, use INSERT para adicionar qualquer conjunto de valores predefinidos a essa coluna. | STRING |
|
GEOMETRY | GEOMETRY | INCOMPATÍVEL | |
BIT | INT64 | INCOMPATÍVEL |
Mapeamento de tipo PostgreSQL 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, compatível com 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 | |
precisão dupla | 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) ] com fuso horário | Hora do dia, incluindo fuso horário. | INCOMPATÍVEL | |
timestamp [ (p) ] [ without time zone ] | Data e hora (sem fuso horário). | DATETIME | |
timestamp [ (p) ] com fuso horário | Data e hora, incluindo fuso horário. | TIMESTAMP | O TIMESTAMP do PostgreSQL é recuperado como fuso horário UTC, não importa de onde você 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 |