Ir para o conteúdo

ADICIONAR GUIA CRIADO COM R e com padrão de organização

Criando Datasets e Tabelas no BigQuery usando R

Passo a Passo para Criar Datasets e Tabelas no BigQuery via R

É preciso que o acesso ao DataHub tenha sido configurado pelo gestor

Dê uma olhadinha na seção Governança de Acessos e Compartilhamento

1. Instale as bibliotecas necessárias

No R, execute:

install.packages(c("bigrquery", "DBI", "dplyr", "readr"))

2. Autentique no Google Cloud

Para autenticar no Google Cloud, estabeleça uma conexão:

library(bigrquery)
library(DBI)
library(dplyr)
library(readr)

# Crie uma conexão para se conectar ao BigQuery
con <- dbConnect(
  bigrquery::bigquery(),
  project = "igarape-datahub"
)

3. Criando um Dataset

Um dataset no BigQuery é um contêiner que organiza e controla o acesso às suas tabelas. Para criar um dataset:

Ao definir o dataset_id, lembre-se dos padrões de nomenclatura

Os padrões de nomenclatura para datasets estão definidos no nosso manual de estilo

# Definir o ID do dataset
dataset_id <- "meu_novo_dataset"

# Criar o dataset
bq_dataset_create(
  x = bq_dataset(project = "igarape-datahub", dataset = dataset_id, location="southamerica-east1")
)

Muita atenção com o parâmetro location!

É muito importante garantir que o parâmetro location seja sempre preenchido com o valor southamerica-east1 para não gerar custos de transferência desnecessários. Mesmo com toda infraestrutura na região southamerica-east1, se o parâmetro location não for especificado, o BigQuery criará o dataset na região padrão (US). Isso resultará em custos de egress (transferência de dados entre regiões) sempre que houver consultas ou movimentação de dados entre seus recursos na América do Sul e o dataset nos EUA. Esses custos podem ser significativos (~$0.14 por GB transferido) e se acumular rapidamente em projetos com grandes volumes de dados.

4. Verificando se o Dataset foi criado

Para listar os datasets disponíveis no seu projeto:

# Listar todos os datasets do projeto
datasets <- bq_project_datasets("igarape-datahub")
print(datasets)

# Verificar se um dataset específico existe
dataset_exists <- bq_dataset_exists(bq_dataset("igarape-datahub", dataset_id))
print(paste("Dataset existe:", dataset_exists))

5. Criando Tabelas no BigQuery

Existem várias formas de criar tabelas no BigQuery usando R:

5.1. Criando uma tabela a partir de um data frame do R

# Criar um data frame de exemplo
dados_exemplo <- data.frame(
  id = 1:5,
  nome = c("Ana", "Bruno", "Carla", "Daniel", "Elena"),
  idade = c(25, 32, 28, 41, 37),
  cidade = c("São Paulo", "Rio de Janeiro", "Belo Horizonte", "Brasília", "Recife"),
  data_cadastro = as.Date(c("2023-01-15", "2023-02-20", "2023-03-10", "2023-04-05", "2023-05-12"))
)

Atenção a codificação dos caracteres no momento de subida das descrições das variáveis

É necessário que os caractéres estejam codificados em UTF-8. Caso contrário, caractéres como ~, ç e ^ não serão reconhecidos e o resultado serão caractéres estranhos. Para ajudar neste processo, foi criado a função create_field_safe que está localizada no repositório do datalake. Basta utilizá-la na criação de cada campo para codificar os caractéres da forma correta.

# Definir a referência da tabela
tabela_ref <- bq_table("igarape-datahub", dataset_id, "usuarios")

#definir o schema da tabela sem codificar para utf-8
schema <- list(
  bq_field("id", "INTEGER", description = "Identificador único"),
  bq_field("nome", "STRING", description = "Nome da pessoa"),
  bq_field("idade", "INTEGER", description = "Idade em anos"),
  bq_field("cidade", "STRING", description = "Cidade de residência"),
  bq_field("data_cadastro", "DATE", description = "Data de cadastro")
)

# definir o schema da tabela codificando para utf-8 com a função customizada

schema <- list(
  create_field_safe("id", "INTEGER", "Identificador único"),
  create_field_safe("nome", "STRING", "Nome da pessoa"),
  create_field_safe("idade", "INTEGER", "Idade em anos"),
  create_field_safe("cidade", "STRING", "Cidade de residência"),
  create_field_safe("data_cadastro", "DATE", "Data de cadastro")
)

Padrão de registro do Schema no repositório do datalake

Sugerimos que os schemas fiquem em arquivos separados e sejam importados no arquivo principal.

#Criar a tabela no Bigquery
bq_table_create(
  x = project_dataset_table,
  fields = schema,  
  description = "Descrição da tabela"
)

# Fazer upload dos dados na tabela
bq_table_upload(
  x = tabela_ref,
  values = dados_exemplo,
)

5.2. Criando uma tabela usando SQL

# Criar uma tabela usando comando SQL
sql_create_table <- "
CREATE TABLE `igarape-datahub.meu_novo_dataset.vendas` (
  id INT64,
  produto STRING,
  valor FLOAT64,
  data_venda DATE,
  vendedor STRING
)
"

# Executar o comando SQL
bq_project_query("igarape-datahub", sql_create_table)

6. Inserindo dados em tabelas existentes

6.1. Adicionando novos registros (APPEND)

# Novos dados para adicionar
novos_usuarios <- data.frame(
  id = 6:8,
  nome = c("Felipe", "Gabriela", "Henrique"),
  idade = c(29, 33, 45),
  cidade = c("Salvador", "Fortaleza", "Manaus"),
  data_cadastro = as.Date(c("2023-06-15", "2023-07-20", "2023-08-10"))
)

#Criar a tabela no Bigquery
bq_table_create(
  x = project_dataset_table,
  fields = schema,  
  description = "Descrição da tabela"
)


# Adicionar à tabela existente
bq_table_upload(
  x = tabela_ref,
  values = novos_usuarios,
)

8. Recursos adicionais