diff --git a/1- Databricks Lakehouse Platform/1.1 - Notebook Basics.py b/1- Databricks Lakehouse Platform/1.1 - Notebook Basics.py index dc19c61..9bd7516 100644 --- a/1- Databricks Lakehouse Platform/1.1 - Notebook Basics.py +++ b/1- Databricks Lakehouse Platform/1.1 - Notebook Basics.py @@ -57,10 +57,46 @@ # COMMAND ---------- +# MAGIC %md +# MAGIC > Este módulo fornece diversas utilidades para que os usuários interajam com o restante do Databricks. +# MAGIC - credenciais: DatabricksCredentialUtils -> Utilitários para interagir com credenciais dentro de notebooks +# MAGIC - dados: DataUtils -> Utilitários para entender e interagir com conjuntos de dados (EXPERIMENTAL) +# MAGIC - fs: DbfsUtils -> Manipula o sistema de arquivos do Databricks (DBFS) a partir do console +# MAGIC - tarefas: JobsUtils -> Utilitários para aproveitar os recursos de tarefas +# MAGIC - biblioteca: LibraryUtils -> Utilitários para bibliotecas isoladas por sessão +# MAGIC - meta: MetaUtils -> Métodos para interceptar o compilador (EXPERIMENTAL) +# MAGIC - notebook: NotebookUtils -> Utilitários para o fluxo de controle de um notebook (EXPERIMENTAL) +# MAGIC - pré-visualização: Preview -> Utilitários na categoria de pré-visualização +# MAGIC - segredos: SecretUtils -> Fornece utilitários para aproveitar segredos dentro de notebooks +# MAGIC - widgets: WidgetsUtils -> Métodos para criar e obter o valor vinculado de widgets de entrada dentro de notebooks + +# COMMAND ---------- + dbutils.fs.help() # COMMAND ---------- +# MAGIC %md +# MAGIC > O dbutils.fs fornece utilitários para trabalhar com sistemas de arquivos. A maioria dos métodos neste pacote pode receber um caminho DBFS (por exemplo, "/foo" ou "dbfs:/foo") ou outro URI de sistema de arquivos. Para obter mais informações - sobre um método, use dbutils.fs.help("nomeDoMétodo"). Em notebooks, você também pode usar a abreviação %fs para acessar o DBFS. A abreviação %fs mapeia diretamente para chamadas dbutils. Por exemplo, "%fs head --maxBytes=10000 /caminho/do/- arquivo" se traduz em "dbutils.fs.head("/caminho/do/arquivo", maxBytes = 10000)". +# MAGIC +# MAGIC > fsutils +# MAGIC - cp(from: String, to: String, recurse: boolean = false): boolean -> Copia um arquivo ou diretório, possivelmente entre sistemas de arquivos diferentes +# MAGIC - head(file: String, maxBytes: int = 65536): String -> Retorna os primeiros 'maxBytes' bytes do arquivo fornecido como uma string codificada em UTF-8 +# MAGIC - ls(dir: String): Seq -> Lista o conteúdo de um diretório +# MAGIC - mkdirs(dir: String): boolean -> Cria o diretório fornecido se ele não existir, criando também quaisquer diretórios pai necessários +# MAGIC - mv(from: String, to: String, recurse: boolean = false): boolean -> Move um arquivo ou diretório, possivelmente entre sistemas de arquivos diferentes +# MAGIC - put(file: String, contents: String, overwrite: boolean = false): boolean -> Escreve a string fornecida em um arquivo, codificada em UTF-8 +# MAGIC - rm(dir: String, recurse: boolean = false): boolean -> Remove um arquivo ou diretório +# MAGIC +# MAGIC > mount +# MAGIC - mount(source: String, mountPoint: String, encryptionType: String = "", owner: String = null, extraConfigs: Map = Map.empty[String, String]): boolean -> Monta o diretório de origem fornecido no DBFS no ponto de montagem especificado +# MAGIC - mounts: Seq -> Exibe informações sobre o que está montado no DBFS +# MAGIC - refreshMounts: boolean -> Força todas as máquinas neste cluster a atualizarem seu cache de montagem, garantindo que recebam as informações mais recentes +# MAGIC - unmount(mountPoint: String): boolean -> Exclui um ponto de montagem do DBFS +# MAGIC - updateMount(source: String, mountPoint: String, encryptionType: String = "", owner: String = null, extraConfigs: Map = Map.empty[String, String]): boolean -> Semelhante a mount(), mas atualiza um ponto de montagem existente (se houver) em vez de criar um novo + +# COMMAND ---------- + files = dbutils.fs.ls('/databricks-datasets') print(files) @@ -70,4 +106,218 @@ # COMMAND ---------- - +# MAGIC %md +# MAGIC +# MAGIC # 📘 Introdução aos Notebooks no Databricks +# MAGIC +# MAGIC Nesta lição, vamos aprender a trabalhar com **notebooks no Databricks**, desde a criação até funcionalidades mais avançadas. +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 🧱 Criando um Notebook +# MAGIC +# MAGIC Para criar um novo notebook: +# MAGIC +# MAGIC 1. Vá até a aba **Workspace (Espaço de trabalho)** +# MAGIC 2. Clique em **Create (Criar)** +# MAGIC 3. Selecione **Notebook** +# MAGIC +# MAGIC Um notebook vazio chamado **“Untitled Notebook”** será criado automaticamente. +# MAGIC +# MAGIC ### ✏️ Renomeando o notebook +# MAGIC +# MAGIC * Clique no nome do notebook +# MAGIC * Digite o novo nome (ex: **“Notebook Basics”**) +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 🧑‍💻 Linguagens Suportadas +# MAGIC +# MAGIC Por padrão, o notebook utiliza **Python**, mas você pode mudar a qualquer momento. +# MAGIC +# MAGIC O Databricks suporta: +# MAGIC +# MAGIC * Python +# MAGIC * SQL +# MAGIC * Scala +# MAGIC * R +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## ⚙️ Conectando a um Cluster +# MAGIC +# MAGIC Antes de executar qualquer código: +# MAGIC +# MAGIC 1. Selecione um cluster na barra superior +# MAGIC 2. Clique em **Start (Iniciar)** +# MAGIC 3. Confirme a ação +# MAGIC +# MAGIC ⏳ O cluster pode levar alguns minutos para iniciar. +# MAGIC 🟢 Um círculo verde indica que ele está ativo. +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## ▶️ Executando Código +# MAGIC +# MAGIC Os notebooks funcionam com **células**. +# MAGIC +# MAGIC Para executar uma célula: +# MAGIC +# MAGIC * Clique no botão **Play** +# MAGIC * Ou use o atalho **Shift + Enter** +# MAGIC +# MAGIC Exemplo: +# MAGIC +# MAGIC ```python +# MAGIC print("Hello World") +# MAGIC ``` +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## ➕ Criando Novas Células +# MAGIC +# MAGIC * Passe o mouse sobre a célula atual +# MAGIC * Clique no botão **+** +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 🔄 Trabalhando com Múltiplas Linguagens +# MAGIC +# MAGIC Se você tentar rodar SQL em um notebook Python, ocorrerá erro. +# MAGIC +# MAGIC ### ✔️ Solução: Comandos mágicos +# MAGIC +# MAGIC Você pode mudar o idioma da célula: +# MAGIC +# MAGIC ```sql +# MAGIC %sql +# MAGIC SELECT * FROM tabela +# MAGIC ``` +# MAGIC +# MAGIC 🔹 O `%sql` é um **comando mágico** +# MAGIC 🔹 Permite usar outra linguagem dentro do notebook +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 📝 Markdown (Texto Formatado) +# MAGIC +# MAGIC Para adicionar texto formatado: +# MAGIC +# MAGIC ```markdown +# MAGIC %md +# MAGIC # Título +# MAGIC Texto em **negrito** ou *itálico* +# MAGIC ``` +# MAGIC +# MAGIC Com Markdown você pode: +# MAGIC +# MAGIC * Criar títulos +# MAGIC * Listas +# MAGIC * Inserir imagens +# MAGIC * Criar tabelas (`|`) +# MAGIC * Usar HTML (links, por exemplo) +# MAGIC +# MAGIC 📌 Títulos criados aparecem automaticamente no **índice lateral**, facilitando navegação. +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 🔗 Executando Outro Notebook +# MAGIC +# MAGIC Você pode reutilizar código com o comando: +# MAGIC +# MAGIC ```python +# MAGIC %run /Includes/Setup +# MAGIC ``` +# MAGIC +# MAGIC Isso executa outro notebook como se fosse parte do atual. +# MAGIC +# MAGIC 💡 Muito útil para: +# MAGIC +# MAGIC * Modularizar código +# MAGIC * Reutilizar variáveis e funções +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 📂 Trabalhando com Arquivos +# MAGIC +# MAGIC ### 🔹 Comando mágico `%fs` +# MAGIC +# MAGIC ```bash +# MAGIC %fs ls /databricks-datasets +# MAGIC ``` +# MAGIC +# MAGIC Lista arquivos de um diretório. +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ### 🔹 Usando `dbutils` +# MAGIC +# MAGIC Mais poderoso que `%fs`: +# MAGIC +# MAGIC ```python +# MAGIC files = dbutils.fs.ls("/databricks-datasets") +# MAGIC display(files) +# MAGIC ``` +# MAGIC +# MAGIC Com `dbutils` você pode: +# MAGIC +# MAGIC * Listar arquivos +# MAGIC * Copiar/remover arquivos +# MAGIC * Trabalhar com secrets +# MAGIC * Criar widgets +# MAGIC +# MAGIC 📊 A função `display()` mostra os dados de forma organizada (tabela, gráfico, etc.) +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 💾 Exportando Notebooks +# MAGIC +# MAGIC Para exportar: +# MAGIC +# MAGIC 1. Clique em **File** +# MAGIC 2. Vá em **Export** +# MAGIC 3. Escolha **iPython Notebook** +# MAGIC +# MAGIC ### 📦 Exportando múltiplos notebooks +# MAGIC +# MAGIC * Exporte como **DBC (Databricks Cloud)** +# MAGIC * Um arquivo zip com notebooks e diretórios +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 📥 Importando Notebooks +# MAGIC +# MAGIC * Clique em **Import** +# MAGIC * Selecione um arquivo `.dbc` +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## 🕘 Histórico de Versões +# MAGIC +# MAGIC O Databricks salva automaticamente versões do notebook. +# MAGIC +# MAGIC Para acessar: +# MAGIC +# MAGIC 1. Clique em **Last Edit (Última edição)** +# MAGIC 2. Escolha uma versão +# MAGIC 3. Clique em **Restore this revision** +# MAGIC +# MAGIC 🔁 Permite voltar facilmente para versões anteriores. +# MAGIC +# MAGIC --- +# MAGIC +# MAGIC ## ✅ Conclusão +# MAGIC +# MAGIC Nesta lição você aprendeu: +# MAGIC +# MAGIC * Criar e configurar notebooks +# MAGIC * Executar código em células +# MAGIC * Usar múltiplas linguagens +# MAGIC * Aplicar comandos mágicos +# MAGIC * Trabalhar com arquivos +# MAGIC * Reutilizar código com `%run` +# MAGIC * Exportar/importar notebooks +# MAGIC * Usar controle de versões +# MAGIC +# MAGIC * Atualizado +# MAGIC diff --git a/1- Databricks Lakehouse Platform/1.2 - Understanding Delta Tables.sql b/1- Databricks Lakehouse Platform/1.2 - Understanding Delta Tables.sql index 78942ab..6ebd85c 100644 --- a/1- Databricks Lakehouse Platform/1.2 - Understanding Delta Tables.sql +++ b/1- Databricks Lakehouse Platform/1.2 - Understanding Delta Tables.sql @@ -9,12 +9,52 @@ -- COMMAND ---------- -USE CATALOG hive_metastore +-- USE CATALOG hive_metastore para o databricks free edition use o codigo USE SCHEMA default ou +-- crie o seu próprio catalog + Create Catalog > NOME_DO_SEU_CATALOG, ENTAO USE CATALOG meu_catalog + + +-- COMMAND ---------- + +-- Opção 1: Se o catalog estiver vazio (sem schemas/tables) +-- DROP CATALOG IF EXISTS alfred_databricks; + +-- Opção 2: Se tiver schemas/tables (exclui tudo recursivamente) +DROP CATALOG IF EXISTS alfred_databricks CASCADE; + +-- COMMAND ---------- + +-- Criar o catalog +CREATE CATALOG IF NOT EXISTS alfred_databricks +COMMENT 'Catalog pessoal para estudos de data engineering'; + +-- COMMAND ---------- + +USE CATALOG alfred_databricks; -- COMMAND ---------- -CREATE TABLE employees - (id INT, name STRING, salary DOUBLE); +-- CRIAR SCHEMA BRONZE (camada raw) +CREATE SCHEMA IF NOT EXISTS bronze +COMMENT 'Camada Bronze - dados raw'; + +-- COMMAND ---------- + +USE CATALOG alfred_databricks; +USE SCHEMA bronze; + +CREATE OR REPLACE TABLE employees ( + id INT, + name STRING, + salary DOUBLE +) USING DELTA; + +-- COMMAND ---------- + +SHOW TABLES + +-- COMMAND ---------- + +SHOW CATALOGS -- COMMAND ---------- @@ -26,6 +66,13 @@ CREATE TABLE employees -- COMMAND ---------- +-- 1. Ver TODAS as tabelas do catalog (information_schema) +SELECT table_name, table_schema, * +FROM system.information_schema.tables +WHERE table_catalog = 'alfred_databricks'; + +-- COMMAND ---------- + -- MAGIC %md -- MAGIC ## Inserting Data @@ -69,7 +116,50 @@ DESCRIBE DETAIL employees -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/user/hive/warehouse/employees' +-- MAGIC %md +-- MAGIC O erro ocorre porque **DBFS root** (`dbfs:/user/hive/warehouse/`) está **desabilitado** na Free Edition (Unity Catalog-only) — tables gerenciadas como `employees` não ficam lá. [docs.databricks](https://docs.databricks.com/aws/en/dbfs/unity-catalog) +-- MAGIC +-- MAGIC ## Localização da Sua Tabela `employees` +-- MAGIC Tables Unity Catalog **gerenciadas** (sem LOCATION) usam storage interno gerenciado pelo Databricks — **não acessível via %fs ls** ou DBFS paths. Dados ficam em location oculta (ex: `/unity-catalog/...`). [docs.databricks](https://docs.databricks.com/aws/en/dbfs/unity-catalog) +-- MAGIC +-- MAGIC ## Comandos Corretos (Não Use DBFS) +-- MAGIC ```sql +-- MAGIC -- 1. Ver DESCRIBE da tabela (mostra location interna) +-- MAGIC DESCRIBE DETAIL alfred_databricks.default.employees; +-- MAGIC +-- MAGIC -- 2. Listar arquivos via SQL (melhor prática) +-- MAGIC LIST '/Volumes/alfred_databricks/default/employees'; -- Se usar volumes +-- MAGIC +-- MAGIC -- 3. Para arquivos raw: Crie VOLUME primeiro +-- MAGIC CREATE VOLUME IF NOT EXISTS alfred_databricks.default.raw_data; +-- MAGIC %fs ls 'dbfs:/Volumes/alfred_databricks/default/raw_data/'; +-- MAGIC ``` +-- MAGIC +-- MAGIC ## Solução Recomendada +-- MAGIC **Crie tabela EXTERNA** com LOCATION acessível: +-- MAGIC ```sql +-- MAGIC -- Criar volume para arquivos raw +-- MAGIC CREATE VOLUME IF NOT EXISTS alfred_databricks.default.raw_employees; +-- MAGIC +-- MAGIC -- Upload arquivo para volume via UI ou %fs +-- MAGIC %fs put /local/file.csv 'dbfs:/Volumes/alfred_databricks/default/raw_employees/'; +-- MAGIC +-- MAGIC -- Tabela externa +-- MAGIC CREATE TABLE alfred_databricks.default.employees_ext +-- MAGIC USING DELTA +-- MAGIC LOCATION 'dbfs:/Volumes/alfred_databricks/default/raw_employees/'; +-- MAGIC ``` +-- MAGIC +-- MAGIC **Não use DBFS root** — Unity Catalog volumes são o padrão Free Edition para arquivos acessíveis. Sua tabela `employees` está segura internamente; use SQL para query! Quer migrar dados? [docs.databricks](https://docs.databricks.com/aws/en/dbfs/unity-catalog) + +-- COMMAND ---------- + +-- %fs ls 'dbfs:/user/hive/warehouse/employees' + +-- COMMAND ---------- + +-- 1. Ver DESCRIBE da tabela (mostra location interna) +DESCRIBE DETAIL alfred_databricks.bronze.employees; -- COMMAND ---------- @@ -88,10 +178,6 @@ SELECT * FROM employees -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/user/hive/warehouse/employees' - --- COMMAND ---------- - DESCRIBE DETAIL employees -- COMMAND ---------- @@ -109,12 +195,8 @@ DESCRIBE HISTORY employees -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/user/hive/warehouse/employees/_delta_log' +-- %fs ls 'dbfs:/user/hive/warehouse/employees/_delta_log' -- COMMAND ---------- --- MAGIC %fs head 'dbfs:/user/hive/warehouse/employees/_delta_log/00000000000000000005.json' - --- COMMAND ---------- - - +-- %fs head 'dbfs:/user/hive/warehouse/employees/_delta_log/00000000000000000005.json' diff --git a/1- Databricks Lakehouse Platform/1.3 - Advanced Delta Lake Features.sql b/1- Databricks Lakehouse Platform/1.3 - Advanced Delta Lake Features.sql index 30cb2e0..4988d0b 100644 --- a/1- Databricks Lakehouse Platform/1.3 - Advanced Delta Lake Features.sql +++ b/1- Databricks Lakehouse Platform/1.3 - Advanced Delta Lake Features.sql @@ -5,40 +5,40 @@ -- COMMAND ---------- -USE CATALOG hive_metastore +USE CATALOG alfred_databricks -- COMMAND ---------- -DESCRIBE HISTORY employees +DESCRIBE HISTORY bronze.employees -- COMMAND ---------- SELECT * -FROM employees VERSION AS OF 4 +FROM bronze.employees VERSION AS OF 4 -- COMMAND ---------- -SELECT * FROM employees@v4 +SELECT * FROM bronze.employees@v4 -- COMMAND ---------- -DELETE FROM employees +DELETE FROM bronze.employees -- COMMAND ---------- -SELECT * FROM employees +SELECT * FROM bronze.employees -- COMMAND ---------- -RESTORE TABLE employees TO VERSION AS OF 5 +RESTORE TABLE bronze.employees TO VERSION AS OF 5 -- COMMAND ---------- -SELECT * FROM employees +SELECT * FROM bronze.employees -- COMMAND ---------- -DESCRIBE HISTORY employees +DESCRIBE HISTORY bronze.employees -- COMMAND ---------- @@ -48,20 +48,20 @@ DESCRIBE HISTORY employees -- COMMAND ---------- -DESCRIBE DETAIL employees +DESCRIBE DETAIL bronze.employees -- COMMAND ---------- -OPTIMIZE employees +OPTIMIZE bronze.employees ZORDER BY id -- COMMAND ---------- -DESCRIBE DETAIL employees +DESCRIBE DETAIL bronze.employees -- COMMAND ---------- -DESCRIBE HISTORY employees +DESCRIBE HISTORY bronze.employees -- COMMAND ---------- @@ -75,31 +75,32 @@ DESCRIBE HISTORY employees -- COMMAND ---------- -VACUUM employees +VACUUM bronze.employees -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/user/hive/warehouse/employees' +-- %fs ls 'dbfs:/user/hive/warehouse/employees' -- COMMAND ---------- -VACUUM employees RETAIN 0 HOURS +VACUUM bronze.employees RETAIN 0 HOURS -- COMMAND ---------- +-- no databricks free edition não temos acesso para alterar essa configuracao SET spark.databricks.delta.retentionDurationCheck.enabled = false; -- COMMAND ---------- -VACUUM employees RETAIN 0 HOURS +VACUUM bronze.employees RETAIN 0 HOURS -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/user/hive/warehouse/employees' +-- %fs ls 'dbfs:/user/hive/warehouse/employees' -- COMMAND ---------- -SELECT * FROM employees@v1 +SELECT * FROM bronze.employees@v1 -- COMMAND ---------- @@ -109,12 +110,12 @@ SELECT * FROM employees@v1 -- COMMAND ---------- -DROP TABLE employees +DROP TABLE bronze.employees -- COMMAND ---------- -SELECT * FROM employees +SELECT * FROM bronze.employees -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/user/hive/warehouse/employees' +-- %fs ls 'dbfs:/user/hive/warehouse/employees' diff --git a/1- Databricks Lakehouse Platform/1.4 - Databases and Tables on Databricks.sql b/1- Databricks Lakehouse Platform/1.4 - Databases and Tables on Databricks.sql index 0c4eb86..c3ac471 100644 --- a/1- Databricks Lakehouse Platform/1.4 - Databases and Tables on Databricks.sql +++ b/1- Databricks Lakehouse Platform/1.4 - Databases and Tables on Databricks.sql @@ -4,9 +4,15 @@ -- COMMAND ---------- -USE CATALOG hive_metastore; +-- No databricks free edition não usa o hive_metastore +-- USE CATALOG hive_metastore; -CREATE TABLE managed_default +-- COMMAND ---------- + +-- Vou usar o catalog já criado o alfred_databricks, e não vou passar o schema bronze vou deixar ele pegar o default +USE CATALOG alfred_databricks; + +CREATE OR REPLACE TABLE managed_default (width INT, length INT, height INT); INSERT INTO managed_default @@ -24,6 +30,11 @@ DESCRIBE EXTENDED managed_default -- COMMAND ---------- +/* +❌ dbfs: ROOT/MOUNTS → BLOQUEADO Unity Catalog Free Edition +✅ Volumes Unity → /Volumes/catalog.schema.volume/ +✅ Managed Tables → Storage interno automático + CREATE TABLE external_default (width INT, length INT, height INT) LOCATION 'dbfs:/mnt/demo/external_default'; @@ -31,9 +42,77 @@ LOCATION 'dbfs:/mnt/demo/external_default'; INSERT INTO external_default VALUES (3 INT, 2 INT, 1 INT) +*/ + +-- COMMAND ---------- + +-- 1. Criar volume +USE CATALOG alfred_databricks; +USE SCHEMA bronze; +CREATE VOLUME IF NOT EXISTS demo_data; +SHOW VOLUMES; -- Confirma criação + +-- COMMAND ---------- + +-- 2. Listar o volume criado +LIST '/Volumes/alfred_databricks/bronze/demo_data/'; + +-- COMMAND ---------- + +-- MAGIC %python +-- MAGIC # 3. Popular volume (Python cell) +-- MAGIC dbutils.fs.put("/Volumes/alfred_databricks/bronze/demo_data/dados.json", +-- MAGIC """[{"width":3,"length":2,"height":1}]""", +-- MAGIC True) +-- MAGIC print("Arquivo criado!") + +-- COMMAND ---------- + +-- 4. Conferir o json criado +SELECT * FROM JSON.`/Volumes/alfred_databricks/bronze/demo_data/dados.json`; + +-- COMMAND ---------- + +-- 5. Tabela Delta lendo JSON (suporta REPLACE) +CREATE OR REPLACE TABLE external_default_delta +USING DELTA +AS SELECT * FROM JSON.`/Volumes/alfred_databricks/bronze/demo_data/dados.json`; + + +-- COMMAND ---------- + +-- 6. Conferir a tabela delta criada +select * from external_default_delta + -- COMMAND ---------- -DESCRIBE EXTENDED external_default +-- Essa seria outra alternativa sem usar o volume e o json + +/* +USE CATALOG alfred_databricks; +USE SCHEMA bronze; + +-- Drop se existir +DROP TABLE IF EXISTS external_default; + +-- Criar Delta (suporta REPLACE) +CREATE TABLE external_default ( + width INT, + length INT, + height INT +) USING DELTA; + +INSERT INTO external_default VALUES (3, 2, 1); + +*/ + +-- COMMAND ---------- + +DESCRIBE EXTENDED external_default_delta; + +-- COMMAND ---------- + +-- DESCRIBE EXTENDED external_default -- COMMAND ---------- @@ -43,19 +122,62 @@ DESCRIBE EXTENDED external_default -- COMMAND ---------- -DROP TABLE managed_default +DROP VOLUME IF EXISTS alfred_databricks.bronze.demo_data; + +-- COMMAND ---------- + +DROP TABLE IF EXISTS alfred_databricks.bronze.external_default_delta; -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/user/hive/warehouse/managed_default' +DROP TABLE IF EXISTS alfred_databricks.default.managed_default; -- COMMAND ---------- -DROP TABLE external_default +-- 1. Confirmar volume atual +SHOW VOLUMES; + +-- 2. Usar contexto correto +USE CATALOG alfred_databricks; +USE SCHEMA bronze; + +-- 3. Excluir +DROP VOLUME IF EXISTS demo_data; + + + +-- COMMAND ---------- + +-- 4. Verificar remoção +SHOW VOLUMES; -- Volume sumiu da lista + +-- COMMAND ---------- + +-- LIST '/Volumes/alfred_databricks/bronze/demo_data/'; + +-- COMMAND ---------- + +USE CATALOG alfred_databricks; +USE SCHEMA bronze; + +-- Excluir volume (seguro, sem erro se não existir) +DROP VOLUME IF EXISTS demo_data; + +-- COMMAND ---------- + +DROP TABLE IF EXISTS managed_default_delta + +-- COMMAND ---------- + +-- %fs ls 'dbfs:/user/hive/warehouse/managed_default' -- COMMAND ---------- --- MAGIC %fs ls 'dbfs:/mnt/demo/external_default' +DROP TABLE IF EXISTS external_default + +-- COMMAND ---------- + +-- %fs ls 'dbfs:/mnt/demo/external_default' -- COMMAND ---------- @@ -163,3 +285,23 @@ DROP TABLE external_custom; -- COMMAND ---------- -- MAGIC %fs ls 'dbfs:/mnt/demo/external_custom' + +-- COMMAND ---------- + +CREATE OR REPLACE TABLE alfred_databricks.bronze.managed_custom + (width INT, length INT, height INT); + + +-- COMMAND ---------- + +INSERT INTO alfred_databricks.bronze.managed_custom +VALUES (3 INT, 2 INT, 1 INT); + +-- COMMAND ---------- + +select * +from alfred_databricks.bronze.managed_custom + +-- COMMAND ---------- + +DROP TABLE IF EXISTS alfred_databricks.bronze.managed_custom; diff --git a/1- Databricks Lakehouse Platform/1.5A - Views.sql b/1- Databricks Lakehouse Platform/1.5A - Views.sql index 165aceb..e0d302e 100644 --- a/1- Databricks Lakehouse Platform/1.5A - Views.sql +++ b/1- Databricks Lakehouse Platform/1.5A - Views.sql @@ -4,7 +4,7 @@ -- COMMAND ---------- -USE CATALOG hive_metastore; +USE CATALOG alfred_databricks; CREATE TABLE IF NOT EXISTS smartphones (id INT, name STRING, brand STRING, year INT); @@ -71,14 +71,17 @@ SHOW TABLES; -- COMMAND ---------- +/* +[NOT_SUPPORTED_WITH_SERVERLESS] GLOBAL TEMPORARY VIEW is not supported on serverless compute. SQLSTATE: 0A000 CREATE GLOBAL TEMP VIEW global_temp_view_latest_phones AS SELECT * FROM smartphones WHERE year > 2020 ORDER BY year DESC; + */ -- COMMAND ---------- -SELECT * FROM global_temp.global_temp_view_latest_phones; +-- SELECT * FROM global_temp.global_temp_view_latest_phones; -- COMMAND ---------- diff --git a/1- Databricks Lakehouse Platform/1.5B - Views (Session 2).sql b/1- Databricks Lakehouse Platform/1.5B - Views (Session 2).sql index e45e864..5a6ad1f 100644 --- a/1- Databricks Lakehouse Platform/1.5B - Views (Session 2).sql +++ b/1- Databricks Lakehouse Platform/1.5B - Views (Session 2).sql @@ -1,5 +1,5 @@ -- Databricks notebook source -USE CATALOG hive_metastore; +USE CATALOG alfred_databricks; -- COMMAND ---------- @@ -11,7 +11,10 @@ SHOW TABLES IN global_temp; -- COMMAND ---------- +/* +[UC_HIVE_METASTORE_DISABLED_EXCEPTION] The operation attempted to use Hive Metastore, which is disabled due to legacy features being turned off in your account or workspace. Please enable Unity Catalog as the Hive Metastore is disabled. SELECT * FROM global_temp.global_temp_view_latest_phones; +*/ -- COMMAND ---------- @@ -24,7 +27,7 @@ SELECT * FROM global_temp.global_temp_view_latest_phones; DROP TABLE smartphones; DROP VIEW view_apple_phones; -DROP VIEW global_temp.global_temp_view_latest_phones; +-- DROP VIEW global_temp.global_temp_view_latest_phones; -- COMMAND ---------- diff --git a/Includes/Notebook Features.ipynb b/Includes/Notebook Features.ipynb new file mode 100644 index 0000000..9b4ded7 --- /dev/null +++ b/Includes/Notebook Features.ipynb @@ -0,0 +1,156 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "1b819f8b-4c4c-49a7-ba04-f0095ec1fa8f", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "\n", + "a = 1\n", + "b = \"Hello world!\"\n", + "c = ['a', 'b', 'c']\n", + "date = datetime.now()" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "632af189-2198-42e7-81fb-ec1108e00ff3", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import random\n", + "import pyspark.pandas as ps\n", + "\n", + "my_np_arr = np.random.rand(3,2)\n", + "my_pandas_df = pd.DataFrame({\"Column1\": my_np_arr[:, 0], \"Column2\": my_np_arr[:, 1]})\n", + "\n", + "my_pandas_df = pd.DataFrame(my_pandas_df)\n", + "\n", + "myy_koalas_df = ps.from_pandas(my_pandas_df)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "14c412ce-938f-4710-8a30-574a18aa9bd6", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "import time\n", + "import pandas as pd\n", + "\n", + "d = {'col1': [1,2], 'col2': [3,4]}\n", + "\n", + "df = pd.DataFrame(data = d)\n", + "\n", + "x = 5\n", + "\n", + "time.sleep(6)\n", + "\n", + "x = 6\n", + "\n", + "print(\"pre foo\")\n", + "\n", + "##foo(df)\n", + "\n", + "print(\"done!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "application/vnd.databricks.v1+cell": { + "cellMetadata": { + "byteLimit": 2048000, + "rowLimit": 10000 + }, + "inputWidgets": {}, + "nuid": "ee1777d4-4416-4c0f-ad9e-4968c7a04a51", + "showTitle": false, + "tableResultSettingsMap": {}, + "title": "" + } + }, + "outputs": [], + "source": [ + "from pyspark.sql.functions import lit\n", + "from datetime import date\n", + "\n", + "df = spark.createDataFrame([\n", + " {\"id\": 1, \"name\": \"Jonas\", \"birthday\": date(1990, 1, 1)},\n", + " {\"id\": 2, \"name\": \"susanMary\", \"birthday\": date(1990, 2, 1)},\n", + " {\"id\": 4, \"name\": \"Alice\", \"birthday\": date(1990, 3, 1)}\n", + "])\n", + "\n", + "\n", + "display(df)\n", + "\n", + "x = 20\n", + "y = 30\n", + "z = 40\n" + ] + } + ], + "metadata": { + "application/vnd.databricks.v1+notebook": { + "computePreferences": null, + "dashboards": [], + "environmentMetadata": { + "base_environment": "", + "environment_version": "5" + }, + "inputWidgetPreferences": null, + "language": "python", + "notebookMetadata": { + "pythonIndentUnit": 4 + }, + "notebookName": "Notebook Features", + "widgets": {} + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Includes/Setup.py b/Includes/Setup.py index 494d5a8..3d8d5a6 100644 --- a/Includes/Setup.py +++ b/Includes/Setup.py @@ -1,2 +1,2 @@ # Databricks notebook source -full_name = "Derar Alhussein" +full_name = "Arthur William Avilez"