メインコンテンツまでスキップ

Excelファイルを読む

重要

この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。「Databricks プレビューの管理」を参照してください。

組み込みの Excel ファイル形式のサポートを使用して、バッチおよびストリーミング ワークロード用の Excel ファイルを取り込み、解析し、クエリを実行できます。スキーマとデータ型を自動的に推測するため、外部ライブラリや手動のファイル変換は不要になります。この機能により、ローカルアップロードとクラウドストレージの両方からのシームレスな取り込みが可能になります。

主な特徴

  • Databricks SQLおよびSpark APIs使用して.xlsファイルと.xlsxファイルを直接読み取ります。
  • データの追加 UI を使用して、 .xlsファイルと.xlsxファイルを直接アップロードします。「Databricks へのファイルのアップロード」を参照してください。
  • 複数シートのファイルから任意のシートを読み取ります。
  • 正確なセル境界または範囲を指定します。
  • スキーマ、ヘッダー、データ型を自動的に推測します。
  • 評価された数式を取り込みます。
  • Excelファイルの構造化ストリーミングにはAuto Loader使用します。

前提条件

Databricks Runtime 17.1 以上。

UI でテーブルを作成または変更する

テーブルの作成または変更 UI を使用して、Excel ファイルからテーブルを作成できます。まずExcelファイルをアップロードするか、ボリュームまたは外部ロケーションからExcelファイルを選択します。 シートを選択し、ヘッダー行の数を調整し、必要に応じてセル範囲を指定します。UI は、選択したファイルとシートから単一のテーブルを作成することをサポートしています。

Excelファイルのクエリ

Sparkバッチ ( spark.read ) およびストリーミング ( spark.readstream ) APIsを使用してExcelファイルをクエリできます。 スキーマを自動的に推測するか、独自のスキーマを指定して Excel ファイルを解析するかを選択できます。デフォルトでは、パーサーは最初のシートの左上のセルから右下の空でないセルまでのすべてのセルを読み取ります。別のシートまたはセル範囲を読み取るには、 dataAddressオプションを使用します。

operationオプションをlistSheetsに設定すると、Excel ファイル内のシートのリストを照会できます。

Excel解析オプション

Excel ファイルを解析するには、次のオプションを使用できます。

データソースオプション

説明

dataAddress

Excel 構文で読み取るセル範囲のアドレス。指定しない場合、パーサーは最初のシートからすべての有効なセルを読み取ります。

  • "" または省略: 最初のシートからすべてのデータを読み取ります。
  • "MySheet!C5:H10": MySheetという名前のシートからC5からH10範囲を読み取ります。
  • "C5:H10": 最初のシートから範囲C5からH10を読み取ります。
  • "Sheet1!A1:A1": Sheet1からセルA1のみを読み取ります。
  • "Sheet1": Sheet1からすべてのデータを読み取ります。
  • "'My Sheet!?>'!D5:G10": My Sheet!?>から D5 から G10 を読み取ります。シート名を'で囲みます。

headerRows

ヘッダー行として扱い、列名として読み取る Excel ファイル内の最初の行の数。dataAddressが指定されている場合、 headerRowsそのセル範囲内のヘッダー行に適用されます。サポートされる値は01です。デフォルトは0です。この場合、列番号を_cに追加して列名が自動的に生成されます (例: _c1_c2_c3 、...)。

例:

  • dataAddress: "A2:D5"headerRows: "0" : 列名を_c1_c4と推論します。行 2 から最初の行のデータを読み取ります: A2からD2
  • dataAddress: "A2:D5"headerRows: "1" : 列名を行 2 のセル値として設定します: A2D2 。3 行目から最初のデータ行を読み取ります: A3からD3

operation

Excel ブックで実行する操作を示します。デフォルトはreadSheetで、シートからデータを読み取ります。サポートされている他の操作はlistSheetsで、ワークブック内のシートのリストを返します。listSheets操作の場合、返されるスキーマは次のフィールドを持つstructです。

  • sheetIndex: 長さ
  • sheetName: 文字列

timestampNTZFormat

日時パターン形式に従う、タイムゾーンのないタイムスタンプ値 (Excel では文字列として保存) のカスタム形式文字列。これは、 TimestampNTZTypeとして読み取られる文字列値に適用されます。デフォルト: yyyy-MM-dd'T'HH:mm:ss[.SSS]

dateFormat

日付時刻パターン形式に従うカスタム日付形式文字列。これは、 Dateとして読み取られる文字列値に適用されます。デフォルト: yyyy-MM-dd

組み込みコネクタLakeFlow Connectを使用してExcelファイルを読み取るコード例を見つけてください。

Spark バッチ読み取りを使用して Excel ファイルを読み取る

spark.read.excelを使用して、クラウド ストレージ (S3、ADLS など) から Excel ファイルを読み取ることができます。例えば:

Python
# 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>))

SQL を使用して Excel ファイルを読み取る

read_filesテーブル値関数を使用すると、SQL を使用して Excel ファイルを直接取り込むことができます。例えば:

SQL
-- 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"
);

Auto Loaderを使用したストリームExcelファイル

cloudFiles.formatexcelに設定すると、 Auto Loaderを使用してExcelファイルをストリームできます。 例えば:

Python
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>)

Excelファイルを取り込む COPY INTO

SQL
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');

複雑な非構造化 Excel シートを解析する

複雑で構造化されていないExcelシート (シートごとに複数のテーブル、データ アイランドなど) の場合、 Databricks 、 dataAddressオプションを使用してSpark DataFramesを作成するために必要なセル範囲を抽出することをお勧めします。 例えば:

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

リストシート

listSheets操作を使用して、Excel ファイル内のシートを一覧表示できます。返されるスキーマは次のフィールドを持つstructです。

  • sheetIndex: 長さ
  • sheetName: 文字列

例えば:

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>))

制限事項

  • パスワードで保護されたファイルはサポートされていません。
  • サポートされるヘッダー行は 1 つだけです。
  • 結合されたセルの値は左上のセルにのみ入力されます。残りの子セルはNULLに設定されます。
  • Auto Loaderを使用したストリーミングExcelファイルはサポートされていますが、スキーマ進化はサポートされていません。 schemaEvolutionMode="None"明示的に設定する必要があります。
  • 「Strict Open XML スプレッドシート (Strict OOXML)」はサポートされていません。
  • .xlsmファイルでのマクロ実行はサポートされていません。
  • ignoreCorruptFilesオプションはサポートされていません。

よくある質問

LakeFlow ConnectのExcelコネクタに関するよくある質問への回答を見つけます。

一度にすべてのシートを読むことはできますか?

パーサーは一度に Excel ファイルから 1 つのシートのみを読み取ります。デフォルトでは、最初のシートを読み取ります。dataAddressオプションを使用して別のシートを指定できます。複数のシートを処理するには、まずoperationオプションをlistSheetsに設定してシートのリストを取得し、次にシート名を反復処理して、 dataAddressオプションで名前を指定して各シートを読み取ります。

複雑なレイアウトやシートごとに複数のテーブルがある Excel ファイルを取り込むことはできますか?

デフォルトでは、パーサーは左上のセルから右下の空でないセルまですべての Excel セルを読み取ります。dataAddressオプションを使用して別のセル範囲を指定できます。

数式と結合セルはどのように処理されますか?

数式はコンピュート値として取り込まれます。 結合されたセルの場合、左上の値のみが保持されます (子セルはNULLです)。

Auto Loaderおよびストリーミング ジョブでExcel取り込みを使用できますか?

はい、 cloudFiles.format = "excel"を使用してExcelファイルをストリームできます。 ただし、スキーマ進化はサポートされていないため、 "schemaEvolutionMode" "None"に設定する必要があります。

パスワードで保護された Excel はサポートされていますか?

いいえ。この機能がワークフローにとって重要である場合は、Databricks アカウント担当者にお問い合わせください。