Bagikan melalui


Membaca file Excel

Penting

Fitur ini ada di Beta. Admin ruang kerja dapat mengontrol akses ke fitur ini dari halaman Pratinjau . Lihat Kelola pratinjau Azure Databricks.

Anda dapat menyerap, mengurai, dan mengkueri file Excel untuk beban kerja batch dan streaming menggunakan dukungan format file Excel bawaan. Ini secara otomatis menyimpulkan skema dan jenis data, menghilangkan kebutuhan akan pustaka eksternal atau konversi file manual. Fitur ini menyediakan penyerapan yang mulus dari unggahan lokal dan penyimpanan cloud.

Fitur utama

  • Langsung membaca file-file .xls dan .xlsx menggunakan Databricks SQL dan Spark API.
  • Unggah .xls dan .xlsx file secara langsung menggunakan UI Tambahkan Data. Lihat Buat atau ubah tabel menggunakan unggahan file.
  • Baca lembar apa pun dari file multi-lembar.
  • Tentukan batas atau rentang sel yang tepat.
  • Secara otomatis menyimpulkan skema, header, dan jenis data.
  • Menyerap rumus yang dievaluasi.
  • Gunakan Auto Loader untuk streaming terstruktur file Excel.

Prasyarat

Databricks Runtime 17.1 atau lebih tinggi.

Membuat atau mengubah tabel di UI

Anda dapat menggunakan antarmuka pengguna Buat atau ubah tabel untuk membuat tabel dari file Excel. Mulailah dengan muat file Excel atau pilih file Excel dari volume atau lokasi eksternal. Pilih lembar, sesuaikan jumlah baris header, dan tentukan rentang sel secara opsional. UI mendukung pembuatan satu tabel dari file dan lembar yang dipilih.

Memproses Berkas Excel

Anda dapat mengkueri file Excel menggunakan API batch Spark (spark.read) dan streaming (spark.readstream). Anda dapat memilih untuk menyimpulkan skema secara otomatis atau menentukan skema Anda sendiri untuk mengurai file Excel. Secara default, pengurai membaca semua sel yang dimulai dari sel kiri atas ke sel non-kosong kanan bawah di lembar pertama. Untuk membaca lembar atau rentang sel yang berbeda, gunakan opsi dataAddress.

Anda bisa mengkueri daftar lembar dalam file Excel dengan mengatur opsi operation ke listSheets.

Opsi penguraian di Excel

Opsi berikut tersedia untuk mengurai file Excel:

Opsi sumber data Description
dataAddress Alamat rentang sel yang akan dibaca dalam sintaks Excel. Jika tidak ditentukan, pengurai membaca semua sel yang valid dari lembar pertama.
  • "" atau dihilangkan: Membaca semua data dari lembar pertama.
  • "MySheet!C5:H10": Membaca rentang C5 hingga H10 dari lembar yang bernama MySheet.
  • "C5:H10": Membaca rentang C5 hingga H10 dari lembar pertama.
  • "Sheet1!A1:A1": Hanya membaca sel A1 dari Sheet1.
  • "Sheet1": Membaca semua data dari Sheet1.
  • "My Sheet!?>!D5:G10": Membaca D5 hingga G10 dari My Sheet!?>.
headerRows Jumlah baris awal dalam file Excel untuk diperlakukan sebagai baris header dan dibaca sebagai nama kolom. Ketika dataAddress ditentukan, headerRows berlaku untuk baris header dalam rentang sel tersebut. Nilai yang didukung adalah 0 dan 1. Defaultnya adalah 0, dalam hal ini nama kolom dihasilkan secara otomatis dengan menambahkan nomor kolom ke _c (misalnya: _c1, , _c2, _c3...).
Examples:
  • dataAddress: "A2:D5", headerRows: "0": Menyimpulkan nama kolom sebagai _c1..._c4. Membaca baris pertama data dari baris 2: A2 ke D2.
  • dataAddress: "A2:D5", : headerRows: "1"Mengatur nama kolom sebagai nilai sel di baris 2: A2 ke D2. Membaca baris pertama data dari baris 3: A3 ke D3.
operation Menunjukkan operasi yang akan dilakukan pada buku kerja Excel. Defaultnya adalah readSheet, yang membaca data dari lembar. Operasi lain yang didukung adalah listSheets, yang mengembalikan daftar lembar dalam buku kerja. Untuk operasi listSheets, skema yang dikembalikan adalah struct dengan bidang berikut:
  • sheetIndex:panjang
  • sheetName:String
timestampNTZFormat Format string kustom untuk nilai tanda waktu (disimpan sebagai string dalam Excel) tanpa zona waktu yang mengikuti format pola tanggal waktu. Ini berlaku untuk nilai string yang dibaca sebagai TimestampNTZType. Standar: yyyy-MM-dd'T'HH:mm:ss[.SSS].
dateFormat String format tanggal kustom yang mengikuti pola tanggal dan waktu. Ini berlaku untuk nilai string yang dibaca sebagai Date. Standar: yyyy-MM-dd.

Examples

Temukan contoh kode untuk membaca file Excel menggunakan konektor bawaan Lakeflow Connect.

Membaca file Excel menggunakan pembacaan batch Spark

Anda dapat membaca file Excel dari penyimpanan cloud (misalnya, S3, ADLS) menggunakan spark.read.excel. Contohnya:

# Read the first sheet from a single Excel file or from multiple Excel files in a directory
df = (spark.read.excel(<path to excel directory or file>))

# Infer schema field name from the header row
df = (spark.read
       .option("headerRows", 1)
       .excel(<path to excel directory or file>))

# Read a specific sheet and range
df = (spark.read
       .option("headerRows", 1)
       .option("dataAddress", "Sheet1!A1:E10")
       .excel(<path to excel directory or file>))

Membaca file Excel menggunakan SQL

Anda dapat menggunakan fungsi read_files bernilai tabel untuk menyerap file Excel secara langsung menggunakan SQL. Contohnya:

-- Read an entire Excel file
CREATE TABLE my_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  schemaEvolutionMode => "none"
);

-- Read a specific sheet and range
CREATE TABLE my_sheet_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  format => "excel",
  headerRows => 1,
  dataAddress => "Sheet1!A2:D10",
  schemaEvolutionMode => "none"
);

Mengalirkan file Excel menggunakan Auto Loader

Anda dapat melakukan streaming file Excel menggunakan Auto Loader dengan mengatur cloudFiles.format ke excel. Contohnya:

df = (
  spark
    .readStream
    .format("cloudFiles")
    .option("cloudFiles.format", "excel")
    .option("cloudFiles.inferColumnTypes", True)
    .option("headerRows", 1)
    .option("cloudFiles.schemaLocation", "<path to schema location dir>")
    .option("cloudFiles.schemaEvolutionMode", "none")
    .load(<path to excel directory or file>)
)
df.writeStream
  .format("delta")
  .option("mergeSchema", "true")
  .option("checkpointLocation", "<path to checkpoint location dir>")
  .table(<table name>)

Mengimpor file Excel menggunakan COPY INTO

CREATE TABLE IF NOT EXISTS excel_demo_table;

COPY INTO excel_demo_table
FROM "<path to excel directory or file>"
FILEFORMAT = EXCEL
FORMAT_OPTIONS ('mergeSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');

Mengurai lembar Excel yang tidak terstruktur kompleks

Untuk lembar Excel yang kompleks dan tidak terstruktur (misalnya, beberapa tabel per lembar, pulau data), Databricks merekomendasikan untuk mengekstrak rentang sel yang Anda butuhkan untuk membuat Spark DataFrames menggunakan opsi dataAddress. Contohnya:

df = (spark.read.format("excel")
       .option("headerRows", 1)
       .option("dataAddress", "Sheet1!A1:E10")
       .load(<path to excel directory or file>))

Daftar lembar

Anda dapat mencantumkan lembar dalam file Excel menggunakan operasi listSheets. Skema yang dikembalikan adalah struct dengan bidang berikut:

  • sheetIndex:panjang
  • sheetName:String

Contohnya:

Python

# List the name of the Sheets in an Excel file
df = (spark.read.format("excel")
       .option("operation", "listSheets")
       .load(<path to excel directory or file>))

SQL

SELECT * FROM read_files("<path to excel directory or file>",
  schemaEvolutionMode => "none",
  operation => "listSheets"
)

Keterbatasan

  • Menulis DataFrame ke format Excel tidak didukung. Anda dapat mengekspor data ke format lain seperti CSV atau Parquet.
  • File yang dilindungi kata sandi tidak didukung.
  • Hanya satu baris header yang didukung.
  • Nilai sel yang digabungkan hanya mengisi sel kiri atas. Sel anak yang tersisa diatur ke NULL.
  • Streaming Excel file menggunakan Auto Loader didukung, tetapi evolusi skema tidak. Anda harus secara eksplisit mengatur schemaEvolutionMode="None".
  • "Strict Open XML Spreadsheet (Strict OOXML)" tidak didukung.
  • Eksekusi makro dalam .xlsm file tidak didukung.
  • Opsi ignoreCorruptFiles tidak didukung.

FAQ

Temukan jawaban atas tanya jawab umum tentang konektor Excel di Lakeflow Connect.

Dapatkah saya membaca semua lembar sekaligus?

Pengurai hanya membaca satu lembar dari file Excel pada satu waktu. Secara default, ia membaca lembar pertama. Anda dapat menentukan lembar yang berbeda menggunakan dataAddress opsi . Untuk memproses beberapa lembar, pertama-tama ambil daftar lembar dengan mengatur opsi operation ke listSheets, lalu iterasi atas nama lembar dan baca masing-masing dengan memberikan namanya pada opsi dataAddress.

Bisakah saya menyerap file Excel dengan tata letak kompleks atau beberapa tabel per lembar?

Secara default, pengurai membaca semua sel Excel dari sel kiri atas ke sel non-kosong kanan bawah. Anda dapat menentukan rentang sel berbeda menggunakan opsi dataAddress.

Bagaimana rumus dan sel gabungan ditangani?

Rumus diserap sebagai nilai komputasinya. Untuk sel gabungan, hanya nilai kiri atas yang dipertahankan (sel anak adalah NULL).

Bisakah saya menggunakan penyerapan Excel di Auto Loader dan pekerjaan streaming?

Ya, Anda dapat melakukan streaming file Excel menggunakan cloudFiles.format = "excel". Namun, evolusi skema tidak didukung, jadi Anda harus mengatur "schemaEvolutionMode" ke "None".

Bisakah saya menulis DataFrame ke format Excel?

Tidak. Konektor Excel bawaan hanya mendukung pembacaan. Untuk mengekspor data, gunakan format tulis yang didukung seperti CSV atau Parquet.

Apakah Excel yang dilindungi kata sandi didukung?

Tidak. Jika fungsionalitas ini sangat penting untuk alur kerja Anda, hubungi perwakilan akun Databricks Anda.