-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgit - transformacao_dados_membros.py
More file actions
62 lines (52 loc) · 2.13 KB
/
git - transformacao_dados_membros.py
File metadata and controls
62 lines (52 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import requests
import pandas as pd
import json
from google.cloud import bigquery
from google.api_core.exceptions import GoogleAPIError
import gcsfs
#dados do bucket no cloud storage
file_path = "--"
bucket_name = '--'
# Configurações do BigQuery
project_id = '--' # Coloque o ID do seu projeto no GCP aqui
dataset_id = '--' # Nome do dataset que já existe no BQ
table_name = 'tranformacao_dados_members' # Nome da tabela
destination_table = f"{dataset_id}.{table_name}"
#função no gcs que lê o json direto
gcs_uri = f"gs://{bucket_name}/{file_path}"
# 1. Abrir o arquivo usando gcsfs para inspecionar a estrutura
fs = gcsfs.GCSFileSystem()
with fs.open(gcs_uri) as f:
dados_brutos = json.load(f)
# 2. Verificar se é um dicionário e encontrar onde está a lista
# Se o JSON for do tipo {"results": [...]}, precisamos acessar essa chave.
if isinstance(dados_brutos, dict):
# Truque: pega a chave que contém uma lista (onde estão seus dados)
# Se você souber o nome da chave (ex: 'members'), substitua abaixo
keys = [k for k, v in dados_brutos.items() if isinstance(v, list)]
if keys:
chave_principal = keys[0]
print(f"Dados encontrados dentro da chave: '{chave_principal}'")
df = pd.json_normalize(dados_brutos[chave_principal])
else:
# Se não tiver lista, tenta normalizar o próprio dicionário
df = pd.json_normalize(dados_brutos)
else:
# Se já for uma lista direta
df = pd.DataFrame(dados_brutos)
# 3. Selecionar apenas as 3 primeiras colunas e todas as linhas
df_final = df.iloc[:, 0:3]
# 4. Validar o resultado
print(f"Formato final da tabela: {df_final.shape}") # Deve aparecer (21, 3)
print("--- Tabela Final ---")
print(df_final) # Imprime tudo (se forem só 21 linhas, cabe na tela)
# Enviando para o BigQuery
try:
df_final.to_gbq(
destination_table=destination_table,
project_id=project_id,
if_exists='replace' # Opções: 'fail', 'replace', 'append'
)
print("Sucesso! Dados enviados para o BigQuery.")
except Exception as e:
print(f"Erro ao enviar: {e}")