dbt-integrering med Azure Databricks

dbt (data build tool) är en utvecklingsmiljö som gör det möjligt för dataanalytiker och datatekniker att omvandla data genom att helt enkelt skriva select-instruktioner. dbt hanterar att omvandla dessa select-instruktioner till tabeller och vyer. Du skriver dbt-kod i valfri textredigerare eller IDE på den lokala utvecklingsdatorn och kör sedan dbt från kommandoraden. dbt kompilerar koden till rå SQL och kör sedan koden på den angivna databasen i Azure Databricks. dbt stöder samarbetsbaserade kodningsmönster och metodtips som versionskontroll, dokumentation, modularitet med mera. Mer information finns i Vad, exakt, är dbt? och Analysteknik för alla: Databricks i dbt Cloud på dbt-webbplatsen.

dbt extraherar eller läser inte in data. dbt fokuserar endast på transformeringssteget med hjälp av en "transformering efter inläsning"-arkitektur. dbt förutsätter att du redan har en kopia av dina data i databasen.

Den här artikeln fokuserar på att använda dbt Core, som innehåller dbt-kommandoradsgränssnittet (CLI). Dbt CLI är kostnadsfritt att använda och öppen källkod.

Krav

Innan du installerar dbt Core måste du installera följande på den lokala utvecklingsdatorn:

Anteckning

Den här artikeln har testats på macOS med följande komponenter:

Steg 1: Skapa och aktivera en virtuell Python-miljö

I det här steget använder du pipenv för att skapa en virtuell Python-miljö. Vi rekommenderar att du använder en virtuell Python-miljö eftersom den isolerar paketversioner och kodberoenden till den specifika miljön, oavsett paketversioner och kodberoenden i andra miljöer. På så sätt kan du minska oväntade matchningsfel för paketversion och kodberoende kollisioner.

  1. Från terminalen växlar du till en tom katalog och skapar katalogen först om det behövs. Den här proceduren skapar en tom katalog dbt_demo med namnet i roten för användarens hemkatalog.

    Unix,   linux,   macos

    mkdir ~/dbt_demo
    cd ~/dbt_demo
    

    Windows

    mkdir %USERPROFILE%\dbt_demo
    cd %USERPROFILE%\dbt_demo
    
  2. I den här tomma katalogen skapar du en fil Pipfile med namnet med följande innehåll. Denna Pipfile instruerar att pipenv använda Python version 3.8.6. Om du använder en annan version ersätter 3.8.6 du med ditt versionsnummer.

    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [requires]
    python_version = "3.8.6"
    
  3. Skapa en virtuell Python-miljö i den här katalogen genom att pipenv köra och ange vilken Python-version som ska användas. Det här kommandot anger Python version 3.8.6. Om du använder en annan version ersätter 3.8.6 du med ditt versionsnummer:

    pipenv --python 3.8.6
    
  4. Aktivera den här virtuella miljön genom att köra pipenv shell . Terminalen visas före prompten för att (dbt_demo) bekräfta aktiveringen. Den virtuella miljön börjar använda den angivna versionen av Python och isolerar alla paketversioner och kodberoenden i den nya miljön.

    pipenv shell
    

    Anteckning

    Om du vill inaktivera den här virtuella miljön kör du exit . (dbt_demo) försvinner från före prompten. Om du kör eller med den här virtuella miljön inaktiverad kan du se en annan version av Python, en annan lista över tillgängliga paket eller python --version pip list paketversioner, eller båda.

  5. Bekräfta att den virtuella miljön kör den förväntade versionen av Python genom att python köra med --version alternativet .

    python --version
    
    Python 3.8.6
    

    Om en oväntad version av Python visas kontrollerar du att du har aktiverat den virtuella miljön genom att köra pipenv shell . Den här proceduren förutsätter att den förväntade versionen för Python är 3.8.6.

Steg 2: Installera nödvändig programvara i din virtuella miljö

I det här steget installerar du pyodbc modulen, dbt och DBT Spark ODBC-plugin-programmet i din virtuella Python-miljö.

  1. När den virtuella miljön är aktiverad installerar du modulen pyodbc genom att köra pipenv . Det här kommandot anger pyodbc version 4.0.30. Om du använder en annan version ersätter 4.0.30 du med ett annat versionsnummer eller installerar den senaste versionen genom att utelämna ==4.0.30 .

    pipenv install pyodbc==4.0.30
    
  2. Installera dbt genom att pipenv köra med namnet på dbt-paketet från Python Package Index (PyPI), som är dbt . Det här kommandot anger dbt version 0.19.1. Om du använder en annan version ersätter 0.19.1 du med ett annat versionsnummer eller installerar den senaste versionen genom att utelämna ==0.19.1 .

    Viktigt

    Om din lokala utvecklingsdator använder något av följande operativsystem måste du slutföra ytterligare steg innan du installerar dbt: Ubuntu, Debian, CentOS och Windows.

    pipenv install dbt==0.19.1
    
  3. Installera dbt Spark ODBC-plugin-programmet genom att köra med namnet på pipenv dbt Spark ODBC-plugin-paketet från PyPI, som är dbt-spark[ODBC] . Det här kommandot anger dbt Spark ODBC-plugin-programmet version 0.19.1. Om du använder en annan version ersätter 0.19.1 du med ett annat versionsnummer eller installerar den senaste versionen genom att utelämna ==0.19.1 .

    pipenv install "dbt-spark[ODBC]==0.19.1"
    

    Du måste ange "dbt-spark[ODBC]" , inklusive versionsnumret om det behövs, inom citattecken.

  4. Bekräfta att den virtuella miljön kör de förväntade versionerna av dbt och dbt Spark ODBC-plugin-programmet genom att dbt köra med --version alternativet . Den här proceduren förutsätter att den förväntade versionen för var och en är 0.19.1.

    dbt --version
    
    Installed version: 0.19.1
    ...
    Plugins:
    ...
      - spark: 0.19.1
    

    Om en oväntad version av dbt eller DBT Spark ODBC-plugin-programmet visas kontrollerar du att du har aktiverat den virtuella miljön genom att köra pipenv shell . Om en oväntad version fortfarande visas kan du försöka installera dbt eller DBT Spark ODBC-plugin-programmet igen när du har aktiverat den virtuella miljön.

Steg 3: Skapa ett dbt-projekt och ange och testa anslutningsinställningar

I det här steget skapar du ett dbt-projekt, som är en samling relaterade kataloger och filer som krävs för att använda dbt. Sedan konfigurerar du anslutningsprofilerna, som innehåller anslutningsinställningar till ett Azure Databricks kluster, en SQL-slutpunkt eller både och. För att öka säkerheten lagras dbt-projekt och profiler på separata platser som standard.

  1. När den virtuella miljön fortfarande är aktiverad kör du kommandot dbt init med ett namn för projektet och anger spark kortet. Den här proceduren skapar ett projekt med namnet my_dbt_demo .

    dbt init my_dbt_demo --adapter spark
    

    Tips

    Läs noggrant kommandots dbt init utdata eftersom det ger ytterligare användbara riktlinjer för användning.

  2. Öppna filen i dbt-konfigurationsmappen. profiles.yml Platsen för den här filen visas i kommandots dbt init utdata.

    Tips

    Om du glömmer var dbt-konfigurationsmappen finns kan du visa den genom att köra dbt debug --config-dir kommandot .

  3. Ändra innehållet i profiles.yml filen, beroende på vad du vill ansluta till.

    Kluster

    databricks_cluster:
      outputs:
        dev:
          type: spark
          method: odbc
          driver: <path-to-odbc-driver>
          schema: default
          host: <cluster-server-hostname>
          organization: "<organization-id>"
          token: <personal-access-token>
          cluster: <cluster-http-path>
          port: <cluster-port-number>
          connect_retries: 5
          connect_timeout: 60
      target: dev
    

    Ersätt:

    • <path-to-odbc-driver> med sökvägen till platsen där Databricks ODBC-drivrutinen är installerad på den lokala utvecklingsdatorn. Hämta sökvägen genom att köra för Unix, Linux eller cat /etc/odbcinst.ini macOS. För Windows använder du Registereditorn för att bläddra till COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI nyckeln.

    • <cluster-server-hostname> med värdet Servervärdnamn från fliken Avancerade alternativ, fliken JDBC/ODBC för ditt Azure Databricks kluster.

    • <organization-id> med värdet mellan och ?o= andra frågesträngavgränsare i URL:en till Azure Databricks arbetsyta.

      Viktigt

      Organisations-ID-värdet måste vara inom citattecken.

    • <personal-access-token> med värdet för din personliga åtkomsttoken.

    • <cluster-http-path> med HTTP-sökvägsvärdet från fliken Avancerade alternativ, fliken JDBC/ODBC för Azure Databricks klustret.

    • <cluster-port-number> med värdet Port från fliken Avancerade alternativ, fliken JDBC/ODBC för Azure Databricks klustret.

    Mer information finns i Ansluta till Databricks ODBC på dbt-webbplatsen och Konfigurera din profil på lagringsplatsen för fish analytics/dbt-spark i GitHub.

     SQL-slutpunkt

    sql_endpoint:
      outputs:
        dev:
          type: spark
          method: odbc
          driver: <path-to-odbc-driver>
          schema: default
          host: <sql-endpoint-server-hostname>
          organization: "<organization-id>"
          token: <personal-access-token>
          endpoint: <sql-endpoint-http-path>
          port: <sql-endpoint-port-number>
          connect_retries: 5
          connect_timeout: 60
      target: dev
    

    Ersätt:

    • <path-to-odbc-driver> med sökvägen till platsen där Databricks ODBC-drivrutinen är installerad på den lokala utvecklingsdatorn. Hämta sökvägen genom att köra för Unix, Linux eller cat /etc/odbcinst.ini macOS. För Windows använder du Registereditorn för att bläddra till COMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI nyckeln.

    • <sql-endpoint-server-hostname> med värdet Servervärdnamn från fliken Anslutningsinformation för SQL-slutpunkten.

    • <organization-id>med värdet mellan och den första punkt ( ) i värdet Servervärdnamn från fliken adb- . Anslutningsinformation för SQL-slutpunkten.

      Viktigt

      Det här värdet måste vara inom citattecken.

    • <personal-access-token> med värdet för din personliga åtkomsttoken.

    • <sql-endpoint-http-path> med värdet efter /sql/1.0/endpoints/ i fältet HTTP-sökväg från fliken Anslutningsinformation för SQL-slutpunkten.

    • <sql-endpoint-port-number> med värdet Port på fliken Anslutningsinformation för SQL-slutpunkten.

    Mer information finns i Ansluta till Databricks ODBC på dbt-webbplatsen och Konfigurera din profil på lagringsplatsen för fish analytics/dbt-spark i GitHub.

    Tips

    Du behöver inte använda anslutningsprofilnamnet som anges i profiles.yml exemplet (till exempel databricks_cluster ). Du kan använda vilka anslutningsprofilnamn du vill. Om du vill tillåta att dbt växlar anslutningar kan du lägga till en separat profilpost för varje anslutning, vilket ger varje profilpost ett unikt namn, till exempel:

    databricks_cluster:
      outputs:
        ...
      target: ...
    
    <some-unique-name-for-this-second-connection-profile>:
      outputs:
        ...
      target: ...
    
    <some-other-unique-name-for-this-third-connection-profile>:
      outputs:
        ...
      target: ...
    
  4. I filen för dbt_project.yml projektet ändrar du värdet för inställningen så att det matchar namnet på profile anslutningsprofilen i profiles.yml filen. I den här proceduren används en anslutningsprofil med namnet databricks_cluster .

    profile: 'databricks_cluster'
    
  5. Kontrollera att anslutningsinformationen är korrekt genom att köra dbt debug kommandot .

    dbt debug
    
    ...
    Configuration:
      profiles.yml file [OK found and valid]
      dbt_project.yml file [OK found and valid]
    
    Required dependencies:
     - git [OK found]
    
    Connection:
      ...
      Connection test: OK connection ok
    

Steg 4: Skapa och köra modeller

I det här steget använder du din favorittextredigerare för att skapa modeller , som är -instruktioner som skapar antingen en ny vy (standard) eller en ny tabell i en databas, baserat på befintliga data i samma select databas. Den här proceduren skapar en modell baserat på exempeltabellen från Azure Databricks, enligt beskrivningen i diamonds avsnittet Skapa en tabell i _. Den här proceduren förutsätter att den här tabellen redan har skapats i arbetsytans default databas.

  1. I projektets -katalog models skapar du en fil med namnet med följande diamonds_four_cs.sql SQL-instruktion. Den här instruktionen väljer endast information om carat, klipp ut, färg och tydlighet för varje romb från diamonds tabellen. Blocket config instruerar dbt att skapa en tabell i databasen baserat på den här instruktionen.

    {{ config(
      materialized="table"
    ) }}
    
    select carat, cut, color, clarity
    from diamonds
    

    Tips

    Ytterligare alternativ som att använda Delta-filformatet och den inkrementella strategin finns i Apache Spark-konfigurationer på dbt-webbplatsen och avsnitten "Modellkonfiguration" och "Inkrementella modeller" i användningsanteckningarna på config merge lagringsplatsen för fishax-analytics/dbt-spark i GitHub.

  2. I projektets -katalog models skapar du en andra fil med namnet med följande diamonds_list_colors.sql SQL-instruktion. Den här instruktionen väljer unika värden från colors kolumnen i tabellen och diamonds_four_cs sorterar resultatet i alfabetisk ordning först till sist. Eftersom det inte finns config något block instruerar den här modellen dbt att skapa en vy i databasen baserat på den här instruktionen.

    select distinct color
    from diamonds_four_cs
    sort by color asc
    
  3. I projektets -katalog models skapar du en tredje fil med namnet med följande diamonds_prices.sql SQL-instruktion. Den här instruktionen genomsnittspriser per färg och sorterar resultatet efter genomsnittligt pris från högsta till lägsta. Den här modellen instruerar dbt att skapa en vy i databasen baserat på den här instruktionen.

    select color, avg(price) as price
    from diamonds
    group by color
    order by price desc
    
  4. När den virtuella miljön är aktiverad kör du dbt run kommandot med sökvägarna till de tre föregående filerna. I databasen default (som anges i profiles.yml filen) skapar dbt en tabell med namnet och diamonds_four_cs två vyer med namnet och diamonds_list_colors diamonds_prices . dbt hämtar dessa vy- och tabellnamn från deras .sql relaterade filnamn.

    dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
    
    ...
    ... | 1 of 3 START table model default.diamonds_four_cs.................... [RUN]
    ... | 1 of 3 OK created table model default.diamonds_four_cs............... [OK ...]
    ... | 2 of 3 START view model default.diamonds_list_colors................. [RUN]
    ... | 2 of 3 OK created view model default.diamonds_list_colors............ [OK ...]
    ... | 3 of 3 START view model default.diamonds_prices...................... [RUN]
    ... | 3 of 3 OK created view model default.diamonds_prices................. [OK ...]
    ... |
    ... | Finished running 1 table model, 2 view models ...
    
    Completed successfully
    
    Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
    
  5. Kör följande SQL-kod för att visa information om de nya vyerna och för att välja alla rader från tabellen och vyerna.

    Om du ansluter till ett kluster kan du köra den här SQL-koden från en notebook-dator som är ansluten till klustret och ange SQL som standardspråk för anteckningsboken. Om du ansluter till en SQL-slutpunkt kan du köra den här SQL-koden från en fråga.

    SHOW views IN default
    
    +-----------+----------------------+-------------+
    | namespace | viewName             | isTemporary |
    +===========+======================+=============+
    | default   | diamonds_list_colors | false       |
    +-----------+----------------------+-------------+
    | default   | diamonds_prices      | false       |
    +-----------+----------------------+-------------+
    
    SELECT * FROM diamonds_four_cs
    
    +-------+---------+-------+---------+
    | carat | cut     | color | clarity |
    +=======+=========+=======+=========+
    | 0.23  | Ideal   | E     | SI2     |
    +-------+---------+-------+---------+
    | 0.21  | Premium | E     | SI1     |
    +-------+---------+-------+---------+
    ...
    
    SELECT * FROM diamonds_list_colors
    
    +-------+
    | color |
    +=======+
    | D     |
    +-------+
    | E     |
    +-------+
    ...
    
    SELECT * FROM diamonds_prices
    
    +-------+---------+
    | color | price   |
    +=======+=========+
    | J     | 5323.82 |
    +-------+---------+
    | I     | 5091.87 |
    +-------+---------+
    ...
    

Nästa steg

Ytterligare resurser