Übung 8 · Auf Entropy Data veröffentlichen
Deine Datenprodukte auf einer Datenproduktplattform auffindbar machen.
Deine Datenprodukte auf einer Datenproduktplattform auffindbar machen.
YAML-Dateien in Git reichen für ein einzelnes Team. Aber wie finden andere Teams deine Datenprodukte, lesen die Kontrakte und beantragen Zugriff? Dafür gibt es eine Datenproduktplattform. In dieser Übung veröffentlichst du alles aus Teil A und B mit der Entropy Data CLI auf Entropy Data.
Wähle eine Option.
Option 1: Cloud. Geh auf app.entropy-data.com, leg ein Konto an und erstelle eine Organisation namens tutorial-<deinname>, z. B. tutorial-simon.
Namen sind plattformweit eindeutig. Erlaubt sind Kleinbuchstaben, Ziffern und Bindestriche.
Erstelle in den Organisationseinstellungen einen API Key mit Schreibrechten für die Organisation.
Option 2: Community Edition, lokal. Starte sie in Docker und führe das Setup-Skript aus. Es legt ein Konto, eine Organisation namens acme und einen API Key an:
docker compose -f entropy-data-ce/docker-compose.yaml up -d
./scripts/setup-entropy-data-ce.sh…
Creating account [email protected] ...
Logging in ...
Creating organization acme ...
Creating organization API key ...
Writing ENTROPY_DATA_API_KEY and ENTROPY_DATA_HOST to .env ...
Done. Log in at http://localhost:8081 with [email protected] / workshop (organization: acme)
Verify the CLI connection with: entropy-data connection testMelde dich unter http://localhost:8081 mit [email protected] / workshop an.
Wo unten tutorial-<deinname> steht, nimmst du acme.
Das Install-Skript aus dem Setup hat die Entropy Data CLI schon installiert. Prüfe es:
entropy-data --versionentropy-data 0.3.13Cloud: Setz deinen API Key als Umgebungsvariable in deinem Terminal:
export ENTROPY_DATA_API_KEY=ed_...
export ENTROPY_DATA_HOST=https://api.entropy-data.comCommunity Edition: Das Setup-Skript hat den Key und ENTROPY_DATA_HOST=http://localhost:8081 in .env geschrieben. Halte ihn trotzdem aus Git heraus: Prüfe vor jedem Commit git status und mach die Änderung mit git checkout .env rückgängig. Führe nie git add .env aus.
Teste die Verbindung:
entropy-data connection testConnection successful.Kontrakte und Datenprodukte nennen ein Team als Owner. Das Team muss existieren, bevor du etwas veröffentlichst, das darauf verweist:
cat <<EOF | entropy-data teams put order_data_team --file -
id: order_data_team
name: Order Data Team
type: team
description: Owns the orders data
EOF
cat <<EOF | entropy-data teams put purchasing_analytics_team --file -
id: purchasing_analytics_team
name: Purchasing Analytics Team
type: team
description: Builds analytical data products for purchasing
EOF
entropy-data teams listTeam 'order_data_team' saved.
Team 'purchasing_analytics_team' saved.
teams (page 0)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━┓
┃ ID ┃ Name ┃ Type ┃ Parent ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━┩
│ governance-group │ Governance Group │ Governance Group │ │
│ platform-team │ Platform Team │ Platform Team │ │
│ order_data_team │ Order Data Team │ team │ │
│ purchasing_analytics_team │ Purchasing Analytics Team │ team │ │
└───────────────────────────┴───────────────────────────┴──────────────────┴────────┘Der team.name in deinen ODCS- und ODPS-Dateien muss der Team-ID entsprechen, z. B. order_data_team.
Das ID-Argument muss dem Feld id im jeweiligen Kontrakt entsprechen:
entropy-data datacontracts put orders_v1 --file orders_v1.odcs.yaml
entropy-data datacontracts put orders_v2 --file orders_v2.odcs.yaml
entropy-data datacontracts put sku_sales_per_year --file sku_sales_per_year.odcs.yaml
entropy-data datacontracts put orders_v2_consumer_sku_sales --file orders_v2.consumer_sku_sales.odcs.yaml
entropy-data datacontracts listData contract 'orders_v1' saved.
Open https://app.entropy-data.com/tutorial-simon/datacontracts/orders_v1
Data contract 'orders_v2' saved.
Open https://app.entropy-data.com/tutorial-simon/datacontracts/orders_v2
Data contract 'sku_sales_per_year' saved.
Open https://app.entropy-data.com/tutorial-simon/datacontracts/sku_sales_per_year
Data contract 'orders_v2_consumer_sku_sales' saved.
Open https://app.entropy-data.com/tutorial-simon/datacontracts/orders_v2_consumer_sku_sales
datacontracts (page 0)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ID ┃ Title ┃ Version ┃ Owner ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ orders_v1 │ Orders │ 1.0.0 │ order_data_team │
│ orders_v2 │ Orders │ 2.0.0 │ order_data_team │
│ sku_sales_per_year │ SKU Sales per Year │ 1.0.0 │ purchasing_analytics_team │
│ orders_v2_consumer_sku_sales │ Orders (SKU Sales) │ 2.0.0 │ purchasing_analytics_team │
└──────────────────────────────┴────────────────────┴─────────┴───────────────────────────┘Entropy Data unterstützt ODPS nativ, du veröffentlichst die Dateien also unverändert.
Das ID-Argument muss dem Feld id in der Datei entsprechen:
entropy-data dataproducts put orders --file orders.odps.yaml
entropy-data dataproducts put sku_sales --file sku_sales_per_year.odps.yaml
entropy-data dataproducts listData product 'orders' saved.
Data product 'sku_sales' saved.
dataproducts (page 0)
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ID ┃ Title ┃ Status ┃ Owner ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ orders │ Orders │ active │ order_data_team │
│ sku_sales │ SKU Sales │ draft │ purchasing_analytics_team │
└───────────┴───────────┴────────┴───────────────────────────┘Auf der Plattform ist die Abhängigkeit ein Access Agreement: SKU Sales konsumiert den Output-Port orders_v2 von Orders. Leg es direkt genehmigt an:
cat <<EOF | entropy-data access put sku_sales_consumes_orders --file -
dataUsageAgreementSpecification: 0.0.1
id: sku_sales_consumes_orders
info:
purpose: SKU Sales aggregates orders and line items per SKU and year for the purchasing team
status: approved
startDate: "2026-01-01"
provider:
dataProductId: orders
outputPortId: orders_v2
dataContractId: orders_v2
consumer:
dataProductId: sku_sales
EOFAccess agreement 'sku_sales_consumes_orders' saved.Mit Status approved und einem startDate in der Vergangenheit ist das Agreement aktiv.
Öffne die Weboberfläche (app.entropy-data.com oder localhost:8081):
sku_sales_per_year und vergleiche ihn mit dem Data Contract Editor.Die Plattform zeigt, ob ein Kontrakt aktuell eingehalten wird, wenn du ihr Testergebnisse schickst.
Führe deine Tests mit --publish und dem Test-Results-Endpunkt deines Hosts aus:
Cloud:
datacontract test sku_sales_per_year.odcs.yaml --publish https://api.entropy-data.com/api/test-resultsTesting sku_sales_per_year.odcs.yaml
🚀 Open https://app.entropy-data.com/tutorial-simon/datacontracts/sku_sales_per_year/servers/postgres/checks
Server: postgres (type=postgres, host=localhost, port=5433, database=workshop, schema=analytics)
╭────────┬──────────────────────────────────────────────────┬─────────────┬─────────╮
│ Result │ Check │ Field │ Details │
├────────┼──────────────────────────────────────────────────┼─────────────┼─────────┤
│ passed │ Ensure the view has data │ │ │
│ passed │ Check that field 'order_count' is present │ order_count │ │
│ … │ │ │ │
│ passed │ Ensure year is plausible │ year │ │
╰────────┴──────────────────────────────────────────────────┴─────────────┴─────────╯
🟢 data contract is valid. Run 15 checks. Took 0.58 seconds.Community Edition:
datacontract test sku_sales_per_year.odcs.yaml --publish http://localhost:8081/api/test-resultsDie CLI schickt deinen API Key nur mit, wenn die URL zum Host in ENTROPY_DATA_HOST gehört. Die Ergebnisse findest du auf der Seite des Kontrakts.
Testergebnisse aus der CI veröffentlichen. Geh in deinem Fork auf GitHub zu Settings → Secrets and variables → Actions und leg ein Repository Secret ENTROPY_DATA_API_KEY an. Gib es im Workflow aus CI/CD mit GitHub Actions an den Test-Schritt weiter und ergänze --publish:
- name: Test data contracts
env:
ENTROPY_DATA_API_KEY: ${{ secrets.ENTROPY_DATA_API_KEY }}
ENTROPY_DATA_HOST: https://api.entropy-data.com
run: datacontract ci *.odcs.yaml --publish https://api.entropy-data.com/api/test-resultsDas geht nur mit der Cloud: Die Runner von GitHub erreichen deine lokale Community Edition nicht.
Git bleibt die Quelle der Wahrheit. Schau dir entropy-data datacontracts import-from-git --help an. Wie würdest du Kontrakte bei jedem Merge auf main automatisch veröffentlichen?