Uso de Copilot en cuadernos de Microsoft Fabric
Copilot for Fabric Data Engineering ayuda a escribir código en cuadernos. Usa el contexto del cuaderno, incluidos los lakehouses conectados, los esquemas disponibles, las tablas, los archivos, el código existente y la información del entorno de ejecución.
Puede interactuar con Copilot de dos maneras:
- Panel de chat de Copilot: Hacer preguntas en lenguaje natural y trabajar en varias celdas del cuaderno. Copilot puede generar, editar, ejecutar, explicar y validar código al tiempo que mantiene el contexto del flujo de trabajo.
- Copilot en la celda: Introduzca una solicitud sobre una celda de código concreta. Use esta experiencia para tareas centradas, como generar código o explicar, corregir, comentar y optimizar el código existente.
Uso del panel de chat de Copilot
Para iniciar una conversación en todo el cuaderno con Copilot:
- Cree o abra un cuaderno.
- Adjunta una casa lacustre para proporcionar el esquema y el contexto de los datos.
- En la cinta de opciones del cuaderno, seleccione Copilot. El panel de chat se abre en el lado derecho del cuaderno.
- Escriba un mensaje en el cuadro de chat o seleccione un mensaje sugerido.
- Revise cada acción solicitada. Seleccione Permitir para permitir que Copilot agregar o editar código y ejecutar celdas, o bien seleccione Omitir para rechazar la acción.
- Una vez que Copilot complete la tarea, revise el resultado y la vista de diferencias. Seleccione Mantener para conservar los cambios o Deshacer para revertirlos.
Copilot puede solicitar aprobación antes de cada acción. Puede cambiar este comportamiento en la configuración de aprobación del panel de chat. Las acciones de alto riesgo, como instalar paquetes o ejecutar varias celdas, siempre requieren aprobación. Para obtener más información, consulte Uso del Copilot para el panel de chat sobre ingeniería de datos y ciencia de datos.
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.
Uso de Copilot para preparar los datos
En este ejemplo, usas Copilot para Data Engineering en Fabric para cargar, transformar y guardar datos en un lakehouse. Contoso Health, una red de hospitales multiespecialidad, quiere analizar los datos de población proyectados a medida que considera la posibilidad de expandir sus servicios en la Unión Europea (UE). En este ejemplo se usa un 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 con un bloc de notas asociado a su lakehouse. Abra el panel de chat de Copilot, escriba el siguiente mensaje y envíelo:
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.
Cuando Copilot solicita permiso para agregar y ejecutar una celda de código, revise las acciones solicitadas y seleccione Permitir. Copilot genera código que puede diferir del ejemplo siguiente:
#### 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')}")
Una vez que se ejecuta la celda, el archivo aparece en la carpeta temporal de lakehouse. Revise el resultado y seleccione Mantener en el panel Copilot.
En el cuadro de chat de Copilot, escriba y envíe el siguiente mensaje:
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.
Revise y permita las acciones solicitadas. El dataframe resultante contiene el contenido del archivo TSV. El código generado podría parecerse a este ejemplo:
#### 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, pida a Copilot dividir el primer campo combinado en columnas independientes, quitar campos sin usar, estandarizar tipos de datos y filtrar los datos. Escriba y envíe el siguiente mensaje en el panel de chat:
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.
Revise y permita las acciones solicitadas. Copilot genera código que puede diferir del ejemplo siguiente:
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'] + [column for column in spark_df.columns if column 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
Después de transformar los datos, pida a Copilot guardar el resultado en lakehouse. Escriba y envíe el siguiente mensaje en el panel de chat:
Save the dataframe as a new table named 'Population' in the default lakehouse.
Revise y permita las acciones solicitadas. Copilot genera código que puede diferir del ejemplo siguiente:
#### 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 usar el panel de chat de Copilot para preguntas exploratorias. Copilot responde con explicaciones o solicitudes de permiso para agregar y ejecutar código. 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()
Aplicación de procedimientos recomendados de Copilot
- 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 lakehouse proporciona un contexto más completo, lo que permite un análisis y transformaciones más precisos.