Köra federerade frågor på MySQL
Den här artikeln beskriver hur du konfigurerar Lakehouse Federation för att köra federerade frågor på MySQL-data som inte hanteras av Azure Databricks. Mer information om Lakehouse Federation finns i Vad är Lakehouse Federation?.
Om du vill ansluta till din MySQL-databas med Lakehouse Federation måste du skapa följande i azure Databricks Unity Catalog-metaarkivet:
- En anslutning till MySQL-databasen.
- En sekundär katalog som speglar din MySQL-databas i Unity Catalog så att du kan använda Unity Catalog-frågesyntax och verktyg för datastyrning för att hantera Azure Databricks-användaråtkomst till databasen.
Innan du börjar
Krav för arbetsyta:
- Arbetsytan är aktiverad för Unity Catalog.
Beräkningskrav:
- Nätverksanslutning från ditt Databricks Runtime-kluster eller SQL-lager till måldatabassystemen. Se Nätverksrekommendationer för Lakehouse Federation.
- Azure Databricks-kluster måste använda Databricks Runtime 13.3 LTS eller senare och delat eller enanvändarläge.
- SQL-lager måste vara Pro eller Serverless och måste använda 2023.40 eller senare.
Behörigheter som krävs:
- Om du vill skapa en anslutning måste du vara metaarkivadministratör eller användare med behörigheten
CREATE CONNECTION
på Unity Catalog-metaarkivet som är kopplat till arbetsytan. - Om du vill skapa en extern katalog måste du ha behörigheten
CREATE CATALOG
för metaarkivet och antingen vara ägare till anslutningen eller ha behörighet förCREATE FOREIGN CATALOG
anslutningen.
Ytterligare behörighetskrav anges i varje aktivitetsbaserat avsnitt som följer.
Skapa en anslutning
En anslutning anger en sökväg och autentiseringsuppgifter för åtkomst till ett externt databassystem. Om du vill skapa en anslutning kan du använda Catalog Explorer eller CREATE CONNECTION
SQL-kommandot i en Azure Databricks-notebook-fil eller Databricks SQL-frågeredigeraren.
Kommentar
Du kan också använda Databricks REST API eller Databricks CLI för att skapa en anslutning. Se POST /api/2.1/unity-catalog/connections och Unity Catalog-kommandon.
Behörigheter som krävs: Metaarkivadministratör eller användare med behörighet.CREATE CONNECTION
Katalogutforskaren
På din Azure Databricks-arbetsyta klickar du på Katalog.
Längst upp i fönstret Katalog klickar du på ikonen Lägg till och väljer Lägg till en anslutning på menyn.
Du kan också klicka på knappen Externa data >på sidan Snabbåtkomst, gå till fliken Anslutningar och klicka på Skapa anslutning.
Ange ett användarvänligt anslutningsnamn.
Välj en anslutningstyp för MySQL.
Ange följande anslutningsegenskaper för din MySQL-instans.
- Värd: Till exempel
mysql-demo.lb123.us-west-2.rds.amazonaws.com
- Port: Till exempel
3306
- Användare: Till exempel
mysql_user
- Lösenord: Till exempel
password123
- Värd: Till exempel
(Valfritt) Klicka på Testa anslutning för att bekräfta att den fungerar.
(Valfritt) Lägg till en kommentar.
Klicka på Skapa.
SQL
Kör följande kommando i en notebook-fil eller Databricks SQL-frågeredigeraren.
CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
Vi rekommenderar att du använder Azure Databricks-hemligheter i stället för klartextsträngar för känsliga värden som autentiseringsuppgifter. Till exempel:
CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
Om du måste använda oformaterade strängar i SQL-kommandon för notebook-filer bör du undvika att trunkera strängen genom att undvika specialtecken som $
med \
. Exempel: \$
.
Information om hur du konfigurerar hemligheter finns i Hemlighetshantering.
Skapa en sekundär katalog
En extern katalog speglar en databas i ett externt datasystem så att du kan köra frågor mot och hantera åtkomst till data i databasen med hjälp av Azure Databricks och Unity Catalog. Om du vill skapa en sekundär katalog använder du en anslutning till datakällan som redan har definierats.
Om du vill skapa en sekundär katalog kan du använda Catalog Explorer eller CREATE FOREIGN CATALOG
SQL-kommandot i en Azure Databricks-notebook-fil eller Databricks SQL-frågeredigeraren.
Kommentar
Du kan också använda Databricks REST API eller Databricks CLI för att skapa en katalog. Se POST /api/2.1/unity-catalog/catalogs och Unity Catalog-kommandon.
Behörigheter som krävs: CREATE CATALOG
behörighet för metaarkivet och antingen ägarskap för anslutningen eller behörigheten CREATE FOREIGN CATALOG
för anslutningen.
Katalogutforskaren
På din Azure Databricks-arbetsyta klickar du på Katalog för att öppna Katalogutforskaren.
Längst upp i fönstret Katalog klickar du på ikonen Lägg till och väljer Lägg till en katalog på menyn.
Du kan också klicka på knappen Kataloger på sidan Snabbåtkomst och sedan på knappen Skapa katalog.
Följ anvisningarna för att skapa utländska kataloger i Skapa kataloger.
SQL
Kör följande SQL-kommando i en notebook- eller Databricks SQL-redigerare. Objekt inom hakparenteser är valfria. Ersätt platshållarvärdena:
<catalog-name>
: Namn på katalogen i Azure Databricks.<connection-name>
: Anslutningsobjektet som anger autentiseringsuppgifterna för datakälla, sökväg och åtkomst.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;
Pushdowns som stöds
Följande pushdowns stöds för all beräkning:
- Filter
- Projektioner
- Gräns
- Funktioner: partiell, endast för filteruttryck. (Strängfunktioner, matematiska funktioner, datum-, tids- och tidsstämpelfunktioner och andra diverse funktioner, till exempel Alias, Cast, SortOrder)
Följande pushdowns stöds på Databricks Runtime 13.3 LTS och senare och på SQL-lager:
- Aggregeringar
- Booleska operatorer
- Följande matematiska funktioner (stöds inte om ANSI är inaktiverat): +, -, *, %, /
- Sortering, när den används med gräns
Följande pushdowns stöds inte:
- Kopplingar
- Windows-funktioner
Datatypsmappningar
När du läser från MySQL till Spark mappar datatyper på följande sätt:
MySQL-typ | Spark-typ |
---|---|
bigint (om inte signerad), decimal | Decimaltyp |
tinyint*, int, heltal, mediumint, smallint | IntegerType |
bigint (om signerad) | LongType |
flyttal | FloatType |
dubbel | DoubleType |
char, enum, set | CharType |
varchar | VarcharType |
json, longtext, mediumtext, text, tinytext | StringType |
binary, blob, varbinary, varchar binary | BinaryType |
bit, boolesk | BooleanType |
datum, år | DateType |
datetime, tid, tidsstämpel** | TidsstämpelTyp/tidsstämpelNTZType |
*tinyint(1) signed
och tinyint(1) unsigned
behandlas som booleska och konverteras till BooleanType
. Se Anslutningsapp/J-referens i MySQL-dokumentationen.
** När du läser från MySQL mappas MySQL Timestamp
till Spark TimestampType
om preferTimestampNTZ = false
(standard). MySQL Timestamp
mappas till TimestampNTZType
om preferTimestampNTZ = true
.