Verwenden von Copilot in Microsoft Fabric-Notizbüchern

Abgeschlossen

Copilot für Fabric Data Engineering unterstützt das Schreiben von Code in Notizbüchern. Es funktioniert mit Lakehouse-Tabellen und -Dateien und kann auf die Datenframes verweisen, mit denen Sie arbeiten.

Es gibt mehrere Möglichkeiten, mit Copilot für Fabric Data Engineering zu interagieren, darunter:

  • Magische Befehle sind spezielle Befehle, die Sie in Ihren Notizbuchzellen verwenden können, um bestimmte Aufgaben auszuführen. Sie beginnen mit einem Doppelten Prozentzeichen (%%) oder einem einzelnen Prozentzeichen (%).
  • Copilot-Chatbereich: Sie können Copilot um Hilfe in einfachem Englisch bitten und generiert Code für Sie basierend auf Ihrer Anfrage. Dies eignet sich am besten für mehrstufige Workflows, das Erstellen von Logik über Zellen hinweg und das Überprüfen von generierten Code mit diff-Ansicht.
  • In-Cell Copilot: Sie können direkt über jeder einzelnen Codezelle mit dem Copilot interagieren, indem Sie ein Textfeld und Slash-Befehle verwenden. Dies eignet sich am besten für fokussierte, einzelzellige Aktionen wie das Beheben von Fehlern oder die Erläuterung von Logik.

Zauberbefehle

Chatbefehle sind spezielle Befehle, die Sie in Ihren Microsoft Fabric-Notizbüchern verwenden können, um mit Copilot zu interagieren. Hier ist eine Liste der am häufigsten verwendeten Befehle:

Command Description
%%chat Stellen Sie Fragen zum Status Ihres Notizbuchs.
%%code Codegenerierung für Datenmanipulation oder -visualisierung.
%show_chat_history Zeigen Sie den Chatverlauf an.
%clear_chat_history Löschen Sie den Chatverlauf.
%set_output Ändern Sie den Standard für die Ausgabe von magischen Befehlen. Auswählen, wo der generierte Code platziert werden soll, aus Optionen wie
- aktuelle Zelle
- neue Zelle
- Zellenausgabe
- in eine Variable
%describe Enthält Zusammenfassungen und Beschreibungen geladener Datenframes.
%%add_comments Fügen Sie Ihrem Code Kommentare hinzu.

Darüber hinaus gibt es auch mehrere Befehle, mit denen Sie Fehler beheben, Datenschutzeinstellungen konfigurieren und Dataframes verwalten können. Weitere Informationen finden Sie unter Verwenden Sie das Copilot Chat-Fenster in Microsoft Fabric-Notebooks.

In-cell Copilot

"In-Cell Copilot ermöglicht es Ihnen, direkt über einer Codezelle mit Copilot zu interagieren, ohne den Bearbeitungskontext zu verlassen." Wählen Sie die Schaltfläche "Copilot " aus, die oberhalb einer Codezelle angezeigt wird, um ein Textfeld zu öffnen, in das Sie eine Anforderung eingeben oder einen Schrägstrichbefehl verwenden können.

Die verfügbaren Slash-Befehle sind:

Command Description
/explain Stellt eine einfache Erläuterung der Codelogik der Zelle bereit.
/fix Identifiziert Fehler in der Zelle und schlägt Korrekturen vor.
/comments Fügt Codekommentare automatisch zu Dokumentlogik- und Datenänderungen hinzu.
/optimize Schlägt Verbesserungen für Leistung und Effizienz vor.

Verwenden Sie In-Cell Copilot, wenn Sie eine bestimmte Zelle verfeinern möchten, z. B. verstehen, was eine Transformation bewirkt, einen Syntaxfehler beheben oder Code dokumentieren, bevor Sie das Notizbuch freigeben. Wechseln Sie für mehrstufige Workflows oder zellübergreifende Aufgaben stattdessen zum Copilot-Chatbereich.

Example

In diesem Beispiel verwenden wir Copilot für Fabric Data Engineering, um Daten in einem Lakehouse zu laden, zu transformieren und zu speichern. Stellen wir uns vor, Contoso Health, ein Multi-Specialty Hospital Network, möchte seine Dienste in der EU erweitern und projizierte Bevölkerungsdaten analysieren. In diesem Beispiel wird das Eurostat-Datenset (statistisches Amt der Europäischen Union) für die Bevölkerungsprognose verwendet.

Quelle: EUROPOP2023 Bevölkerung am 1. Januar nach Alter, Geschlecht und Art der Projektion [proj_23np], Letzte Aktualisierung: 28. Juni 2023.

Laden der Daten

Beginnen Sie in einem neuen Notizbuch, das an Ihr Lakehouse angefügt ist. In einer neuen Zelle können Sie die folgende Eingabeaufforderung ausprobieren. Durch das Voranstellen von %%code signalisieren Sie Copilot, dass Sie generierten Code wünschen. Führen Sie sie aus, wenn Sie bereit sind, zu sehen, was Copilot vorschlägt.

%%code

Download the following file from this URL:
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/proj_23np$defaultview/?format=TSV

Then write the file to the default lakehouse into a temporary folder. Create the temporary folder if it doesn't exist yet.

Copilot generiert Code, der je nach Ihrer Umgebung und den neuesten Updates für Copilot geringfügig unterschiedlich sein kann.

#### ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

import urllib.request
import os

# Step 1: Download the file
url = "https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/proj_23np$defaultview/?format=TSV"
file_path = "/tmp/proj_23np_defaultview.tsv"

urllib.request.urlretrieve(url, file_path)

# Step 2: Create a temporary folder in the default lakehouse
lakehouse_temp_folder = "/lakehouse/default/Files/temp"
os.makedirs(lakehouse_temp_folder, exist_ok=True)

# Step 3: Write the file to the lakehouse temporary folder
import shutil
shutil.move(file_path, os.path.join(lakehouse_temp_folder, "proj_23np.tsv"))

print(f"File successfully written to {os.path.join(lakehouse_temp_folder, 'proj_23np.tsv')}")

Nachdem Sie die Zelle ausgeführt haben, sollte die Datei heruntergeladen und im temporären Ordner Ihres Lakehouse abgelegt sein.

In einer anderen neuen Zelle könnten Sie Copilot bitten, die Daten wie folgt zu laden:

%%code

Load the file 'Files/temp/proj_23np.tsv' into a spark dataframe.
The fields are separated with a tab.
Show the contents of the DataFrame using display method.

Der resultierende Dataframe enthält den Inhalt der TSV-Datei. Ein mögliches generiertes Skript könnte wie folgt aussehen:

#### ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

# Load the file 'Files/temp/proj_23np.tsv' into a spark dataframe.
# The fields have been separated with a tab.
file_path = "Files/temp/proj_23np.tsv"

spark_df = spark.read.format("csv").option("delimiter", "\t").option("header", "true").load(file_path)

# Show the contents of the DataFrame using display method
display(spark_df)

So könnte das Ergebnis aussehen:

freq,projektion,Geschlecht,Alter,Einheit,geo\TIME_PERIOD 2022 2023 ... 2100
A,BSL,F,GESAMT,PER,AT 4553444 4619179 ... 4807661
A,BSL,F,TOTAL,PER,BE 5883978 5947528 ... 6331785
A,BSL,F,GESAMT,PER,BG 3527626 3605059 ... 2543673
... ... ... ... 5081250
A,BSL,F,GESAMT,PER,CY 463622 476907 ... 504781

Transformieren von Daten

Als Nächstes sollten Sie die Daten transformieren: Das kombinierte erste Feld in separate Spalten aufteilen, nicht verwendete Felder bereinigen, Datentypen standardisieren und ein bisschen Filtern anwenden. Ein Prompt wie der folgende in einer neuen Zelle kann Copilot als Anleitung dienen:

%%code

Now transform this dataframe spark_df and split the first field 'freq,projection,sex,age,unit,geo\TIME_PERIOD' using a comma into 6 separate fields.

Then, remove the fields 'freq', 'age', 'unit'.

The fields 'projection', 'sex', 'geo' should be positioned first.

The 'projection' field contains codes that should be replaced with the following values:

 _'BSL' -> 'Baseline projections'.
 _'LFRT' -> 'Sensitivity test: lower fertility'.
 _'LMRT' -> 'Sensitivity test: lower mortality'.
 _'HMIGR' -> 'Sensitivity test: higher migration'.
 _'LMIGR' -> 'Sensitivity test: lower migration'.
 _'NMIGR' -> 'Sensitivity test: no migration'.

Filter the 'geo' field and remove values 'EA20' and 'EU27_2020' (these are not countries).

Filter the 'sex' field and remove 'T' (these are totals).

Strip spaces from all field names in the dataframe.

Convert the data type of all the year fields to integer.

Display (Render) the DataFrame.

Copilot generiert Code, der je nach Ihrer Umgebung und den neuesten Updates für Copilot geringfügig unterschiedlich sein kann.

from pyspark.sql.functions import split, col

# Load the file 'Files/temp/proj_23np.tsv' into a spark dataframe.
file_path = "Files/temp/proj_23np.tsv"
spark_df = spark.read.format("csv").option("delimiter", "\t").option("header", "true").load(file_path)

# Split the first field 'freq,projection,sex,age,unit,geo\TIME_PERIOD' into 6 separate fields.
split_col = split(spark_df['freq,projection,sex,age,unit,geo\TIME_PERIOD'], ',')
spark_df = spark_df.withColumn('freq', split_col.getItem(0)) \
                   .withColumn('projection', split_col.getItem(1)) \
                   .withColumn('sex', split_col.getItem(2)) \
                   .withColumn('age', split_col.getItem(3)) \
                   .withColumn('unit', split_col.getItem(4)) \
                   .withColumn('geo', split_col.getItem(5))

# Remove the fields 'freq', 'age', 'unit'
columns_to_drop = ['freq', 'age', 'unit', 'freq,projection,sex,age,unit,geo\TIME_PERIOD']
spark_df = spark_df.drop(*columns_to_drop)

# Reorder the columns, placing 'projection', 'sex', 'geo' first
columns_order = ['projection', 'sex', 'geo']  |  [col for col in spark_df.columns if col not in ['projection', 'sex', 'geo']]
spark_df = spark_df.select(*columns_order)

# Replace projection field codes with values
replace_map = {
    'BSL': 'Baseline projections',
    'LFRT': 'Sensitivity test: lower fertility',
    'LMRT': 'Sensitivity test: lower mortality',
    'HMIGR': 'Sensitivity test: higher migration',
    'LMIGR': 'Sensitivity test: lower migration',
    'NMIGR': 'Sensitivity test: no migration'
}
spark_df = spark_df.replace(replace_map, subset=['projection'])

# Filter the 'geo' field to remove values 'EA20' and 'EU27_2020'
spark_df = spark_df.filter(~spark_df['geo'].isin(['EA20', 'EU27_2020']))

# Filter the 'sex' field to remove 'T'
spark_df = spark_df.filter(spark_df['sex'] != 'T')

# Strip spaces from all field names
spark_df = spark_df.toDF(*(c.replace(' ', '') for c in spark_df.columns))

# Convert the data type of all the year fields to integer
for column in spark_df.columns:
    if column.isnumeric():
        spark_df = spark_df.withColumn(column, col(column).cast('int'))

# Display the DataFrame
display(spark_df)

Hier ist ein Beispiel dafür, wie die Ausgabe aussehen kann:

projection Geschlecht Geologie 2022 2023 ... 2100
Basisprojektionen F BEI 4553444 4619179 ... 4807661
Basisprojektionen F BE 5883978 5947528 ... 6331785
Basisprojektionen F BG 3527626 3605059 ... 2543673
... ... ... ... ... ... ...
Basisprojektionen F LU 320333 329401 ... 498954

Speichern von Daten

Wenn die Transformationen in-Place sind, möchten Sie das Ergebnis vielleicht in Lakehouse speichern. Instanz lässt Copilot mit einem Prompt wie diesem eine Speicherlogik generieren:

%%code
 
Save the dataframe as a new table named 'Population' in the default lakehouse.

Copilot generiert Code, der je nach Ihrer Umgebung und den neuesten Updates für Copilot geringfügig unterschiedlich sein kann.

#### ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

spark_df.write.format("delta").saveAsTable("Population")

Validation

Um zu überprüfen, ob die Tabelle wie erwartet gespeichert wurde, erweitern Sie die Tabellenliste in Ihrem Lakehouse, und überprüfen Sie den Inhalt. Sie können sich auch an den Copilot-Chat-Bereich wenden, um schnelle explorative Fragen zu erhalten; Copilot antwortet mit Erklärungen oder runnablem Code. Beispiel:

What is the projected population for geo BE in 2050?

Copilot generiert Code zum Filtern der Daten für das angegebene Geo und Jahr und zeigt das Ergebnis an.

# ATTENTION: AI-generated code can include errors or operations you didn't intend. Review the code in this cell carefully before running it.

from pyspark.sql import SparkSession

# Initialize Spark session
spark = SparkSession.builder.getOrCreate()

# Load the Population table into a Spark DataFrame
spark_df = spark.read.table("population")

# Filter for the projected population for geo BE in 2050
result_df = spark_df.filter((spark_df['geo'] == 'BE') & (spark_df['projection'] == 'Baseline projections')).select('2050')

# Show the result
result_df.show()

Bewährte Methoden

  • Copilot ist derzeit am stärksten mit Data Engineering- und Data Science-Szenarien, sodass die Rahmenfragen in diesen Bereichen tendenziell klarere Ergebnisse liefern.
  • Wenn Sie Copilot konkrete Verweise auf Ihre Assets (Dateipfade, Tabellennamen, Spaltennamen) geben, werden die generierten Antworten in der Regel spezifischer und nützlicher.
  • Das Laden von Daten als DataFrames oder das Festhalten von Datensätzen in Ihrem Lakehouse liefert einen umfangreicheren Kontext und ermöglicht eine genauere Analyse und Transformation.