Uso de Copilot en cuadernos de Microsoft Fabric
Copilot for Fabric Data Engineering ayuda a escribir código en cuadernos. Funciona con tablas y archivos de Lakehouse, y puede hacer referencia a los dataframes con los que trabaja.
Hay varias maneras de interactuar con Copilot for Fabric Data Engineering, entre las que se incluyen:
-
Los comandos mágicos son comandos especiales que se pueden usar en las celdas del notebook para ejecutar tareas específicas. Comienzan con un signo de porcentaje doble (
%%) o un signo de un solo porcentaje (%). - Panel de chat de Copilot: Puede pedir ayuda a Copilot en inglés sin formato y genera código para usted en función de su solicitud. Esto es mejor para flujos de trabajo de varios pasos, crear lógica entre celdas y revisar el código generado con la vista de diferencias.
- Copilot en celda: puede interactuar con Copilot justo encima de cualquier celda de código mediante un cuadro de texto y comandos de barra. Esto es mejor para acciones centradas y de una sola celda, como corregir errores o explicar la lógica.
Comandos mágicos
Los comandos de chat son comandos especiales que puede usar en los cuadernos de Microsoft Fabric para interactuar con Copilot. Esta es una lista de los comandos más usados:
| Command | Description |
|---|---|
%%chat |
Haga preguntas sobre el estado del bloc de notas. |
%%code |
Generación de código para la manipulación o visualización de datos. |
%show_chat_history |
Mostrar el historial del chat. |
%clear_chat_history |
Borre el historial del chat. |
%set_output |
Cambie el valor predeterminado de cómo proporcionan los comandos mágicos la salida. Elija dónde colocar el código generado, desde opciones como - celda actual - nueva celda - salida de célula - en una variable |
%describe |
Proporciona resúmenes y descripciones de tramas de datos cargadas. |
%%add_comments |
Agregue comentarios al código. |
Además, también hay varios comandos que permiten corregir errores, configurar la configuración de privacidad y administrar tramas de datos. Consulte Usar el panel de chat de Copilot en cuadernos de Microsoft Fabric para obtener más información.
Copilot en celda
Copilot en celda le permite interactuar con Copilot justo encima de una celda de código, sin salir del entorno de edición. Seleccione el botón Copilot que aparece encima de una celda de código para abrir un cuadro de texto donde puede escribir una solicitud o usar un comando de barra diagonal.
Los comandos de barra diagonal disponibles son:
| Command | Description |
|---|---|
/explain |
Proporciona una explicación en lenguaje simple de la lógica de código de la celda. |
/fix |
Identifica los errores de la celda y sugiere correcciones. |
/comments |
Agrega automáticamente comentarios de código a la lógica del documento y a los cambios de datos. |
/optimize |
Sugiere mejoras en el rendimiento y la eficacia. |
Utilice Copilot en la celda cuando desee refinar una celda específica; por ejemplo, para comprender lo que hace una transformación, corregir un error en la sintaxis del código o documentar el código antes de compartir el cuaderno. En el caso de flujos de trabajo de varios pasos o tareas entre celdas, cambie al panel de chat de Copilot en su lugar.
Example
En este ejemplo, usamos Copilot para Fabric Data Engineering para cargar, transformar y guardar datos en una instancia de Lakehouse. Imaginemos que Contoso Health, una red de hospitales de varias especialidades, quiere expandir sus servicios en la UE y quiere analizar los datos de población proyectados. En este ejemplo se utiliza el conjunto de datos de proyección de población de Eurostat (la oficina estadística de la Unión Europea).
Fuente: EUROPOP2023 Población el 1 de enero por edad, sexo y tipo de proyección [proj_23np], Última actualización el 28 de junio de 2023.
Carga de datos
Comience en un bloc de notas nuevo que esté conectado a Lakehouse. En una nueva celda, puede probar la siguiente solicitud. Si incluye prefijos %%code, eso indica a Copilot que quiere que se genere código. Ejecútelo cada vez que esté listo para ver lo que Copilot propone.
%%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 genera código, que puede diferir ligeramente en función de su entorno y de las actualizaciones más recientes de Copilot.
#### 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')}")
Después de ejecutar la celda, debería encontrar el archivo descargado en la carpeta temporal de su almacén de lago de datos.
En otra nueva celda, podría pedir a Copilot que cargue los datos de la siguiente manera:
%%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.
El dataframe resultante contendrá el contenido del archivo TSV. Un posible script generado podría ser similar al siguiente:
#### 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)
Este es un ejemplo del aspecto que podría tener la salida:
| freq,proyección,sexo,edad,unidad,geo\TIME_PERIOD | 2022 | 2023 | ... | 2100 |
|---|---|---|---|---|
| A,BSL,F,TOTAL,PER,AT | 4553444 | 4619179 | ... | 4807661 |
| A,BSL,F,TOTAL,PER,BE | 5883978 | 5947528 | ... | 6331785 |
| A,BSL,F,TOTAL,PER,BG | 3527626 | 3605059 | ... | 2543673 |
| ... | ... | ... | ... | 5081250 |
| A,BSL,F,TOTAL,PER,CY | 463622 | 476907 | ... | 504781 |
Transformación de datos
A continuación, considere la posibilidad de transformar los datos: dividir el primer campo combinado en columnas independientes, limpiar campos sin usar, estandarizar tipos de datos y aplicar un poco de filtrado. Un mensaje similar al siguiente en una nueva celda puede guiar a Copilot:
%%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 genera código, que puede diferir ligeramente en función de su entorno y de las actualizaciones más recientes de Copilot.
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)
Este es un ejemplo del aspecto que podría tener la salida:
| projection | sexo | geo | 2022 | 2023 | ... | 2100 |
|---|---|---|---|---|---|---|
| Proyecciones de línea base | F | EN | 4553444 | 4619179 | ... | 4807661 |
| Proyecciones de línea base | F | BE | 5883978 | 5947528 | ... | 6331785 |
| Proyecciones de línea base | F | BG | 3527626 | 3605059 | ... | 2543673 |
| ... | ... | ... | ... | ... | ... | ... |
| Proyecciones de línea base | F | LU | 320333 | 329401 | ... | 498954 |
Guardar datos
Con las transformaciones aplicadas, es posible que desee guardar el resultado en el almacén de lago de datos. Por ejemplo, una solicitud de celda como esta hará que el Copilot genere la lógica de guardado:
%%code
Save the dataframe as a new table named 'Population' in the default lakehouse.
Copilot genera código, que puede diferir ligeramente en función de su entorno y de las actualizaciones más recientes de Copilot.
#### 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
Para comprobar que la tabla se guardó según lo previsto, expanda la lista Tablas en Lakehouse y revise su contenido. También puede recurrir al panel de chat de Copilot para preguntas exploratorias rápidas; Copilot responderá con explicaciones o código ejecutable. Por ejemplo:
What is the projected population for geo BE in 2050?
Copilot genera código para filtrar los datos de la geo y el año especificados y mostrar el resultado.
# 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()
procedimientos recomendados
- Copilot es actualmente más fuerte con escenarios de ingeniería de datos y ciencia de datos, por lo que enmarcar preguntas en esos dominios tiende a producir resultados más claros.
- Proporcionar a Copilot referencias concretas de sus recursos de datos (rutas de acceso de archivos, nombres de tablas, nombres de columnas) normalmente mejora la especificidad y la utilidad de las respuestas generadas.
- Cargar datos como DataFrames o anclar conjuntos de datos en su almacén de lago de datos proporciona un contexto más rico, lo que permite análisis y transformaciones más precisos.