Skip to content

Commit

Permalink
Merge pull request #554 from basedosdados/staging/add-ncm-sh
Browse files Browse the repository at this point in the history
[dbt] novos diretórios
  • Loading branch information
folhesgabriel authored Apr 19, 2024
2 parents 2458dd9 + 03f154f commit dfc273e
Show file tree
Hide file tree
Showing 6 changed files with 256 additions and 32 deletions.
56 changes: 26 additions & 30 deletions .github/workflows/check-bq-project-name.yml
Original file line number Diff line number Diff line change
@@ -1,38 +1,34 @@
---
name: Check BQ project name
on:
workflow_dispatch:
pull_request:
paths:
- '**/*.sql'

paths: ['**/*.sql']
jobs:
check_bucket_name:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Get changed files
id: get_files
uses: dorny/paths-filter@v2
with:
list-files: shell
filters: |
pr:
- added|deleted|modified: '**'
- name: Install Python
uses: actions/setup-python@v2
with:
python-version: '3.x'

- name: Run Python script
run: |
for file in ${{ steps.get_files.outputs.pr_files }}; do
if [[ $file == *.sql ]]; then
echo "SQL file detected: $file"
python .github/workflows/scripts/check_sql_files.py $file
else
echo "Não é um arquivo SQL: $file"
fi
done
- name: Checkout code
uses: actions/checkout@v2
- name: Get changed files
id: get_files
uses: dorny/paths-filter@v2
with:
list-files: shell
filters: |
pr:
- added|deleted|modified: '**'
- name: Install Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Run Python script
run: |-
for file in ${{ steps.get_files.outputs.pr_files }}; do
if [[ $file == *.sql ]]; then
echo "SQL file detected: $file"
python .github/workflows/scripts/check_sql_files.py $file
else
echo "Não é um arquivo SQL: $file"
fi
done
5 changes: 3 additions & 2 deletions .github/workflows/scripts/check_sql_files.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import argparse
import os

def check_sql_files(file):
found_staging = False
if file.endswith(".sql"):
if os.path.exists(file) and file.endswith(".sql"):
with open(file, "r") as f:
lines = f.readlines()
for line in lines:
Expand All @@ -20,4 +21,4 @@ def check_sql_files(file):
if check_sql_files(args.file):
exit(1)
else:
print("No occurrences of 'basedosdados-dev' found in SQL files.")
print("No occurrences of 'basedosdados-staging' found in SQL files.")
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{{ config(alias="nomenclatura_comum_mercosul", schema="br_bd_diretorios_mundo") }}
select
safe_cast(co_ncm as string) id_ncm,
safe_cast(co_unid as string) id_unidade,
safe_cast(co_sh6 as string) id_sh6,
safe_cast(co_ppe as string) id_ppe,
safe_cast(co_ppi as string) id_ppi,
safe_cast(co_fat_agreg as string) id_fator_agregado_ncm,
safe_cast(co_cuci_item as string) id_cgce_n3,
safe_cast(co_cgce_n3 as string) id_isic_classe,
safe_cast(co_siit as string) id_exp_subset,
safe_cast(
case
when co_unid = '10'
then lower('QUILOGRAMA LIQUIDO')
when co_unid = '11'
then lower('NUMERO (UNIDADE)')
when co_unid = '12'
then lower('MILHEIRO')
when co_unid = '13'
then lower('PARES')
when co_unid = '14'
then lower('METRO')
when co_unid = '15'
then lower('METRO QUADRADO')
when co_unid = '16'
then lower('METRO CUBICO')
when co_unid = '17'
then lower('LITRO')
when co_unid = '18'
then lower('MIL QUILOWATT HORA')
when co_unid = '19'
then lower('QUILATE')
when co_unid = '20'
then lower('DUZIA')
when co_unid = '21'
then lower('TONELADA METRICA LIQUIDA')
when co_unid = '22'
then lower('GRAMA LIQUIDO')
when co_unid = '23'
then lower('BILHOES DE UNIDADES INTERNACIONAIS')
when co_unid = '24'
then lower('QUILOGRAMA BRUTO')
else lower(co_unid)
end as string
) as nome_unidade,
safe_cast(co_isic_classe as string) nome_ncm_portugues,
safe_cast(co_exp_subset as string) nome_ncm_espanhol,
safe_cast(no_ncm_por as string) nome_ncm_ingles,
from
`basedosdados-staging.br_bd_diretorios_mundo_staging.nomenclatura_comum_mercosul`
as t
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{{ config(alias="sistema_harmonizado", schema="br_bd_diretorios_mundo") }}
select
safe_cast(co_sh6 as string) id_sh6,
safe_cast(co_sh4 as string) id_sh4,
safe_cast(co_sh2 as string) id_sh2,
safe_cast(co_ncm_secrom as string) id_ncm_secrom,
safe_cast(no_sh6_por as string) nome_sh6_portugues,
safe_cast(no_sh4_por as string) nome_sh4_portugues,
safe_cast(no_sh2_por as string) nome_sh2_portugues,
safe_cast(no_sec_por as string) nome_sec_portugues,
safe_cast(no_sh6_esp as string) nome_sh6_espanhol,
safe_cast(no_sh4_esp as string) nome_sh4_espanhol,
safe_cast(no_sh2_esp as string) nome_sh2_espanhol,
safe_cast(no_sec_esp as string) nome_sec_espanhol,
safe_cast(no_sh6_ing as string) nome_sh6_ingles,
safe_cast(no_sh4_ing as string) nome_sh4_ingles,
safe_cast(no_sh2_ing as string) nome_sh2_ingles,
safe_cast(no_sec_ing as string) nome_sec_ingles,
from `basedosdados-staging.br_bd_diretorios_mundo_staging.sistema_harmonizado` as t
67 changes: 67 additions & 0 deletions models/br_bd_diretorios_mundo/download_sh4_ncm.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import requests\n",
"from io import BytesIO\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"urls = {\n",
" 'ncm' : 'https://balanca.economia.gov.br/balanca/bd/tabelas/NCM.csv',\n",
" 'sh4': 'https://balanca.economia.gov.br/balanca/bd/tabelas/NCM_SH.csv'\n",
" }\n",
"\n",
"for k in urls:\n",
" print(f'Baixando tabela {k}')\n",
" \n",
" response = requests.get(urls[k], verify=False)\n",
" if response.status_code == 200:\n",
" \n",
" data = BytesIO(response.content)\n",
" df = pd.read_csv(data, encoding='latin-1', sep=';', dtype = str)\n",
" df.to_csv(\n",
" f'{k}.csv',\n",
" index=False,\n",
" encoding = 'utf-8',\n",
" sep=',', \n",
" )\n",
" else:\n",
" print(f'Erro! O status da requisição foi {response.status_code}')\n",
"\n",
" "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "bd_pipelines",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.15"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
89 changes: 89 additions & 0 deletions models/br_bd_diretorios_mundo/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,92 @@ models:
description: Nacionalidade
- name: sigla_continente
description: Sigla do continente do país
- name: br_bd_diretorios_mundo__nomenclatura_comum_mercosul
description: A Nomenclatura Comum do Mercosul (NCM) é um sistema ordenado que
permite, pela aplicação de regras e procedimentos próprios, determinar um único
código numérico para uma dada mercadoria.
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns: [id_ncm]
- not_null_proportion_multiple_columns:
at_least: 0.99
columns:
- name: id_ncm
description: Identificador da Nomenclatura Comum do Mercosul (NCM)
- name: id_unidade
description: Identificador da unidade estátisca do id_ncm
- name: id_sh6
description: Identificador de 6 dígitos do Sistema Harmonizado (SH6) relacionado
com o id_ncm
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__sistema_harmonizado')
field: id_sh6
- name: id_ppe
description: Identificador da Pauta de Produtos Exportados (PPE) do id_ncm
- name: id_ppi
description: Identificador da Pauta de Produtos Importados (PPI) do id_ncm
- name: id_fator_agregado_ncm
description: Identificadores de Fator Agregado (FA) do id_ncm
- name: id_cgce_n3
description: Identificador da Classificação por Grandes Categorias Econômicas
(CGCE) do id_ncm
- name: id_isic_classe
description: Identificador da classe da Classificação de Setores Industriais
ISIC (International Standard Industrial Classification) do id_ncm
- name: id_exp_subset
description: Não informado
- name: nome_unidade
description: Nome da unidade estatística do id_ncm
- name: nome_ncm_portugues
description: Descrição do id_ncm em português
- name: nome_ncm_espanhol
description: Descrição do id_ncm em espanhol
- name: nome_ncm_ingles
description: Descrição do id_ncm em inglês
- name: br_bd_diretorios_mundo__sistema_harmonizado
description: O "Sistema Harmonizado de Designação e de Codificação de Mercadorias",
ou simplesmente "Sistema Harmonizado", tem o objetivo maior foi a criação de
um sistema único mundial de designação e de codificação de mercadorias.
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns: [id_sh6]
- not_null_proportion_multiple_columns:
at_least: 0.99
columns:
- name: id_sh6
description: Identificador de 6 dígitos do Sistema Harmonizado (SH6)
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__nomenclatura_comum_mercosul')
field: id_sh6
- name: id_sh4
description: Identificador de 4 dígitos do Sistema Harmonizado (SH6)
- name: id_sh2
description: Identificador de 2 dígitos do Sistema Harmonizado (SH6)
- name: id_ncm_secrom
description: Não informado
- name: nome_sh6_portugues
description: Descrição do id_sh6 em português
- name: nome_sh4_portugues
description: Descrição do id_sh4 em português
- name: nome_sh2_portugues
description: Descrição do id_sh2 em português
- name: nome_sec_portugues
description: Descrição do em português
- name: nome_sh6_espanhol
description: Descrição do id_sh6 em espanhol
- name: nome_sh4_espanhol
description: Descrição do id_sh4 em espanhol
- name: nome_sh2_espanhol
description: Descrição do id_sh2 em espanhol
- name: nome_sec_espanhol
description: Descrição do em espanhol
- name: nome_sh6_ingles
description: Descrição do id_sh6 em inglês
- name: nome_sh4_ingles
description: Descrição do id_sh4 em inglês
- name: nome_sh2_ingles
description: Descrição do id_sh2 em inglês
- name: nome_sec_ingles
description: Descrição do em inglês

0 comments on commit dfc273e

Please sign in to comment.