Bagikan melalui


Rekayasa Fitur dalam Katalog Unity

Halaman ini menjelaskan cara membuat dan bekerja dengan tabel fitur di Katalog Unity.

Halaman ini hanya berlaku untuk ruang kerja yang diaktifkan untuk Katalog Unity. Jika ruang kerja Anda tidak diaktifkan untuk Katalog Unity, lihat Bekerja dengan fitur di Penyimpanan Fitur Ruang Kerja.

Untuk detail tentang perintah dan parameter yang digunakan dalam contoh di halaman ini, lihat referensi API Python Rekayasa Fitur.

Persyaratan

Rekayasa Fitur di Unity Catalog memerlukan Databricks Runtime 13.2 atau lebih tinggi. Selain itu, metastore Unity Catalog harus memiliki Privilege Model Versi 1.0.

Menginstal Rekayasa Fitur di klien Python Katalog Unity

Rekayasa Fitur di Unity Catalog memiliki klien FeatureEngineeringClientPython . Kelas ini tersedia di PyPI dengan databricks-feature-engineering paket dan telah diinstal sebelumnya di Databricks Runtime 13.3 LTS ML ke atas. Jika Anda menggunakan Runtime Databricks non-ML, Anda harus menginstal klien secara manual. Gunakan matriks kompatibilitas untuk menemukan versi yang benar untuk versi Databricks Runtime Anda.

%pip install databricks-feature-engineering

dbutils.library.restartPython()

Membuat katalog dan skema untuk tabel fitur di Unity Catalog

Anda harus membuat katalog baru atau menggunakan katalog yang sudah ada untuk tabel fitur.

Untuk membuat katalog baru, Anda harus memiliki CREATE CATALOG hak istimewa di metastore.

CREATE CATALOG IF NOT EXISTS <catalog-name>

Untuk menggunakan katalog yang ada, Anda harus memiliki USE CATALOG hak istimewa pada katalog.

USE CATALOG <catalog-name>

Tabel fitur di Katalog Unity harus disimpan dalam skema. Untuk membuat skema baru di katalog, Anda harus memiliki CREATE SCHEMA hak istimewa pada katalog.

CREATE SCHEMA IF NOT EXISTS <schema-name>

Membuat tabel fitur di Katalog Unity

Catatan

Anda bisa menggunakan tabel Delta yang sudah ada di Katalog Unity yang menyertakan batasan kunci utama sebagai tabel fitur. Jika tabel tidak memiliki kunci utama yang ditentukan, Anda harus memperbarui tabel menggunakan ALTER TABLE pernyataan DDL untuk menambahkan batasan. Lihat Menggunakan tabel Delta yang sudah ada di Katalog Unity sebagai tabel fitur.

Namun, menambahkan kunci utama ke tabel streaming atau tampilan materialisasi yang diterbitkan ke Katalog Unity oleh alur Tabel Langsung Delta mengharuskan memodifikasi skema tabel streaming atau definisi tampilan materialisasi untuk menyertakan kunci utama lalu menyegarkan tabel streaming atau tampilan materialisasi. Lihat Menggunakan tabel streaming atau tampilan materialisasi yang dibuat oleh alur Tabel Langsung Delta sebagai tabel fitur.

Tabel fitur di Unity Catalog adalah tabel Delta. Tabel fitur harus memiliki kunci primer. Tabel fitur, seperti aset data lain di Unity Catalog, diakses menggunakan namespace tiga tingkat: <catalog-name>.<schema-name>.<table-name>.

Anda dapat menggunakan Databricks SQL, Python FeatureEngineeringClient, atau alur Tabel Langsung Delta untuk membuat tabel fitur di Unity Catalog.

Databricks SQL

Anda dapat menggunakan tabel Delta apa pun dengan batasan kunci utama sebagai tabel fitur. Kode berikut menunjukkan cara membuat tabel dengan kunci primer:

CREATE TABLE ml.recommender_system.customer_features (
  customer_id int NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
);

Untuk membuat tabel fitur rangkaian waktu, tambahkan kolom waktu sebagai kolom kunci utama dan tentukan kata kunci TIMESERIES . Kata kunci TIMESERIES memerlukan Databricks Runtime 13.3 LTS atau lebih tinggi.

CREATE TABLE ml.recommender_system.customer_features (
  customer_id int NOT NULL,
  ts timestamp NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
);

Setelah tabel dibuat, Anda dapat menulis data seperti tabel Delta lainnya, dan dapat digunakan sebagai tabel fitur.

Python

Untuk detail tentang perintah dan parameter yang digunakan dalam contoh berikut, lihat referensi API Python Rekayasa Fitur.

  1. Tulis fungsi Python untuk mengomputasi fitur. Output dari setiap fungsi harus berupa Apache Spark DataFrame dengan kunci primer yang unik. Kunci primer dapat berisi dari satu atau beberapa kolom.
  2. Buat tabel fitur dengan membuat instans FeatureEngineeringClient dan menggunakan create_table.
  3. Isilah tabel fitur menggunakan write_table.
from databricks.feature_engineering import FeatureEngineeringClient

fe = FeatureEngineeringClient()

# Prepare feature DataFrame
def compute_customer_features(data):
  ''' Feature computation code returns a DataFrame with 'customer_id' as primary key'''
  pass

customer_features_df = compute_customer_features(df)

# Create feature table with `customer_id` as the primary key.
# Take schema from DataFrame output by compute_customer_features
customer_feature_table = fe.create_table(
  name='ml.recommender_system.customer_features',
  primary_keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer features'
)

# An alternative is to use `create_table` and specify the `df` argument.
# This code automatically saves the features to the underlying Delta table.

# customer_feature_table = fe.create_table(
#  ...
#  df=customer_features_df,
#  ...
# )

# To use a composite primary key, pass all primary key columns in the create_table call

# customer_feature_table = fe.create_table(
#   ...
#   primary_keys=['customer_id', 'date'],
#   ...
# )

# To create a time series table, set the timeseries_columns argument

# customer_feature_table = fe.create_table(
#   ...
#   primary_keys=['customer_id', 'date'],
#   timeseries_columns='date',
#   ...
# )

Membuat tabel fitur di Unity Catalog dengan alur Delta Live Tables

Catatan

Dukungan Tabel Langsung Delta untuk batasan tabel ada di Pratinjau Umum. Contoh kode berikut harus dijalankan menggunakan saluran pratinjau Tabel Langsung Delta.

Tabel apa pun yang diterbitkan dari alur Tabel Langsung Delta yang menyertakan batasan kunci utama dapat digunakan sebagai tabel fitur. Untuk membuat tabel dalam alur Tabel Langsung Delta dengan kunci utama, Anda dapat menggunakan antarmuka pemrograman Databricks SQL atau Delta Live Tables Python.

Untuk membuat tabel dalam alur Tabel Langsung Delta dengan kunci primer, gunakan sintaks berikut:

Databricks SQL

CREATE LIVE TABLE customer_features (
  customer_id int NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
) AS SELECT * FROM ...;

Python

import dlt

@dlt.table(
  schema="""
          customer_id int NOT NULL,
          feat1 long,
          feat2 varchar(100),
          CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
    """)
def customer_features():
  return ...

Untuk membuat tabel fitur rangkaian waktu, tambahkan kolom waktu sebagai kolom kunci utama dan tentukan kata kunci TIMESERIES .

Databricks SQL

CREATE LIVE TABLE customer_features (
  customer_id int NOT NULL,
  ts timestamp NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
) AS SELECT * FROM ...;

Python

import dlt

@dlt.table(
  schema="""
    customer_id int NOT NULL,
    ts timestamp NOT NULL,
    feat1 long,
    feat2 varchar(100),
    CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
    """)
def customer_features():
  return ...

Setelah tabel dibuat, Anda dapat menulis data seperti himpunan data Tabel Langsung Delta lainnya, dan dapat digunakan sebagai tabel fitur.

Menggunakan tabel Delta yang sudah ada di Katalog Unity sebagai tabel fitur

Setiap tabel Delta di Unity Catalog dengan kunci utama dapat menjadi tabel fitur di Unity Catalog, dan Anda dapat menggunakan UI Fitur dan API dengan tabel .

Catatan

  • Hanya pemilik tabel yang dapat mendeklarasikan batasan kunci utama. Nama pemilik ditampilkan pada halaman detail tabel Catalog Explorer.
  • Verifikasi jenis data dalam tabel Delta didukung oleh Rekayasa Fitur di Katalog Unity. Harap lihat Jenis data yang didukung.
  • Kata kunci TIMESERIES memerlukan Databricks Runtime 13.3 LTS atau lebih tinggi.

Jika tabel Delta yang ada tidak memiliki batasan kunci utama, Anda dapat membuatnya sebagai berikut:

  1. Atur kolom kunci utama ke NOT NULL. Untuk setiap kolom kunci utama, jalankan:

    ALTER TABLE <full_table_name> ALTER COLUMN <pk_col_name> SET NOT NULL
    
  2. Ubah tabel untuk menambahkan batasan kunci utama:

    ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1, pk_col2, ...)
    

    pk_name adalah nama batasan kunci utama. Menurut konvensi, Anda dapat menggunakan nama tabel (tanpa skema dan katalog) dengan _pk akhiran. Misalnya, tabel dengan nama "ml.recommender_system.customer_features" akan memiliki customer_features_pk sebagai nama batasan kunci utamanya.

    Untuk membuat tabel menjadi tabel fitur rangkaian waktu, tentukan kata kunci TIMESERIES di salah satu kolom kunci utama, sebagai berikut:

    ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1 TIMESERIES, pk_col2, ...)
    

    Setelah Anda menambahkan batasan kunci utama pada tabel, tabel muncul di antarmuka pengguna Fitur dan Anda bisa menggunakannya sebagai tabel fitur.

Menggunakan tabel streaming atau tampilan materialisasi yang dibuat oleh alur Tabel Langsung Delta sebagai tabel fitur

Setiap tabel streaming atau tampilan terwujud di Katalog Unity dengan kunci utama dapat menjadi tabel fitur di Unity Catalog, dan Anda dapat menggunakan Antarmuka Pengguna fitur dan API dengan tabel .

Catatan

  • Dukungan Tabel Langsung Delta untuk batasan tabel ada di Pratinjau Umum. Contoh kode berikut harus dijalankan menggunakan saluran pratinjau Tabel Langsung Delta.
  • Hanya pemilik tabel yang dapat mendeklarasikan batasan kunci utama. Nama pemilik ditampilkan pada halaman detail tabel Catalog Explorer.
  • Verifikasi bahwa Rekayasa Fitur di Katalog Unity mendukung jenis data dalam tabel Delta. Harap lihat Jenis data yang didukung.

Untuk mengatur kunci utama untuk tabel streaming atau tampilan materialisasi yang ada, perbarui skema tabel streaming atau tampilan terwujud di buku catatan yang mengelola objek. Kemudian, refresh tabel untuk memperbarui objek Katalog Unity.

Berikut ini adalah sintaks untuk menambahkan kunci primer ke tampilan materialisasi:

Databricks SQL

CREATE OR REFRESH MATERIALIZED VIEW existing_live_table(
  id int NOT NULL PRIMARY KEY,
  ...
) AS SELECT ...

Python

import dlt

@dlt.table(
  schema="""
    id int NOT NULL PRIMARY KEY,
    ...
    """
)
def existing_live_table():
  return ...

Mengontrol akses ke tabel fitur di Katalog Unity

Kontrol akses untuk tabel fitur di Unity Catalog dikelola oleh Unity Catalog. Lihat Hak istimewa Katalog Unity.

Memperbarui tabel fitur di Katalog Unity

Anda dapat memperbarui tabel fitur di Katalog Unity dengan menambahkan fitur baru atau dengan memodifikasi baris tertentu berdasarkan kunci utama.

Metadata tabel fitur berikut tidak boleh diperbarui:

  • Kunci primer.
  • Kunci partisi.
  • Nama atau jenis data fitur yang sudah ada.

Mengubahnya akan menyebabkan alur hilir yang menggunakan fitur untuk melatih dan melayani model rusak.

Menambahkan fitur baru ke tabel fitur yang sudah ada di Katalog Unity

Anda dapat menambahkan fitur baru ke tabel fitur yang sudah ada dengan salah satu dari dua cara:

  • Perbarui fungsi komputasi fitur yang sudah ada dan jalankan write_table dengan DataFrame yang ditampilkan. Ini akan memperbarui skema tabel fitur dan menggabungkan nilai fitur baru berdasarkan kunci primer.
  • Buat fungsi komputasi fitur baru untuk menghitung nilai fitur baru. DataFrame yang dikembalikan oleh fungsi komputasi baru ini harus berisi kunci utama dan partisi tabel fitur (jika ditentukan). Jalankan write_table dengan DataFrame untuk menulis fitur baru ke tabel fitur yang ada menggunakan kunci primer yang sama.

Memperbarui baris tertentu saja dalam tabel fitur

Gunakan mode = "merge" di write_table. Baris yang kunci primernya tidak ada di DataFrame yang dikirimkan dalam panggilan write_table tetap tidak berubah.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.write_table(
  name='ml.recommender_system.customer_features',
  df = customer_features_df,
  mode = 'merge'
)

Menjadwalkan pekerjaan untuk memperbarui tabel fitur

Untuk memastikan bahwa fitur dalam tabel fitur selalu memiliki nilai terbaru, Databricks menyarankan agar Anda membuat pekerjaan yang menjalankan notebook untuk memperbarui tabel fitur Anda secara berkala, seperti setiap hari. Jika Anda sudah memiliki pekerjaan yang tidak terjadwal yang dibuat, Anda dapat mengonversinya ke pekerjaan terjadwal untuk memastikan nilai fitur selalu diperbarui.

Kode untuk memperbarui tabel fitur menggunakan mode='merge', seperti yang ditunjukkan dalam contoh berikut.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

customer_features_df = compute_customer_features(data)

fe.write_table(
  df=customer_features_df,
  name='ml.recommender_system.customer_features',
  mode='merge'
)

Menyimpan nilai fitur harian sebelumnya

Tentukan tabel fitur dengan kunci primer komposit. Sertakan tanggal dalam kunci primer. Misalnya, untuk tabel fitur customer_features, Anda dapat menggunakan kunci primer komposit (date, customer_id) dan kunci partisi date untuk pembacaan yang efisien.

Databricks SQL

CREATE TABLE ml.recommender_system.customer_features (
  customer_id int NOT NULL,
  `date` date NOT NULL,
  feat1 long,
  feat2 varchar(100),
  CONSTRAINT customer_features_pk PRIMARY KEY (`date`, customer_id)
)
PARTITIONED BY (`date`)
COMMENT "Customer features";

Python

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.create_table(
  name='ml.recommender_system.customer_features',
  primary_keys=['date', 'customer_id'],
  partition_columns=['date'],
  schema=customer_features_df.schema,
  description='Customer features'
)

Anda kemudian dapat membuat kode untuk membaca dari tabel fitur yang memfilter date ke periode waktu yang dibutuhkan.

Anda juga dapat membuat tabel fitur rangkaian waktu yang memungkinkan pencarian titik waktu saat Anda menggunakan create_training_set atau score_batch. Lihat Membuat tabel fitur di Katalog Unity.

Untuk selalu memperbarui tabel fitur, siapkan pekerjaan yang dijadwalkan secara teratur untuk menulis fitur atau mengalirkan nilai fitur baru ke dalam tabel fitur.

Membuat alur komputasi fitur streaming untuk memperbarui fitur

Untuk membuat alur komputasi fitur streaming, teruskan streaming DataFrame sebagai argumen ke write_table. Metode ini mengembalikan objek StreamingQuery.

def compute_additional_customer_features(data):
  ''' Returns Streaming DataFrame
  '''
  pass

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

customer_transactions = spark.readStream.load("dbfs:/events/customer_transactions")
stream_df = compute_additional_customer_features(customer_transactions)

fe.write_table(
  df=stream_df,
  name='ml.recommender_system.customer_features',
  mode='merge'
)

Membaca dari tabel fitur di Unity Catalog

Gunakan read_table untuk membaca nilai fitur.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
customer_features_df = fe.read_table(
  name='ml.recommender_system.customer_features',
)

Cari dan telusuri tabel fitur di Katalog Unity

Gunakan antarmuka pengguna Fitur untuk mencari atau menelusuri tabel fitur di Katalog Unity.

  1. Klik Ikon Penyimpanan Fitur Fitur di bilah samping untuk menampilkan UI Fitur.

  2. Pilih katalog dengan pemilih katalog untuk melihat semua tabel fitur yang tersedia di katalog tersebut. Dalam kotak pencarian, masukkan semua atau sebagian nama tabel fitur, fitur, atau komentar. Anda juga dapat memasukkan semua atau sebagian kunci atau nilai tag. Teks pencarian tidak peka huruf besar/kecil.

    Contoh pencarian fitur

Mendapatkan metadata tabel fitur di Unity Catalog

Gunakan get_table untuk mendapatkan metadata tabel fitur.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
ft = fe.get_table(name="ml.recommender_system.user_feature_table")
print(ft.features)

Menggunakan tag dengan tabel fitur dan fitur di Unity Catalog

Anda dapat menggunakan tag, yang merupakan pasangan kunci-nilai sederhana, untuk mengategorikan dan mengelola tabel fitur dan fitur Anda.

Untuk tabel fitur, Anda dapat membuat, mengedit, dan menghapus tag menggunakan Catalog Explorer, pernyataan SQL di notebook atau editor kueri SQL, atau Api Python Rekayasa Fitur.

Untuk fitur, Anda bisa membuat, mengedit, dan menghapus tag menggunakan pernyataan Catalog Explorer atau SQL di notebook atau editor kueri SQL.

Lihat Menerapkan tag ke objek yang dapat diamankan Katalog Unity dan API Python.

Contoh berikut menunjukkan cara menggunakan API Python Rekayasa Fitur untuk membuat, memperbarui, dan menghapus tag tabel fitur.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

# Create feature table with tags
customer_feature_table = fe.create_table(
  # ...
  tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2", ...},
  # ...
)

# Upsert a tag
fe.set_feature_table_tag(name="customer_feature_table", key="tag_key_1", value="new_key_value")

# Delete a tag
fe.delete_feature_table_tag(name="customer_feature_table", key="tag_key_2")

Menghapus tabel fitur di Unity Catalog

Anda dapat menghapus tabel fitur di Unity Catalog dengan langsung menghapus tabel Delta di Unity Catalog menggunakan Catalog Explorer atau menggunakan Api Python Rekayasa Fitur.

Catatan

  • Menghapus tabel fitur dapat menyebabkan kegagalan tak terduga di produsen hulu dan konsumen hilir (model, titik akhir, dan pekerjaan terjadwal). Anda harus menghapus penyimpanan online yang diterbitkan dengan penyedia cloud Anda.
  • Saat Anda menghapus tabel fitur di Katalog Unity, tabel Delta yang mendasar juga dihilangkan.
  • drop_table tidak didukung di Databricks Runtime 13.1 ML atau di bawahnya. Gunakan perintah SQL untuk menghapus tabel.

Anda dapat menggunakan Databricks SQL atau FeatureEngineeringClient.drop_table untuk menghapus tabel fitur di Unity Catalog:

Databricks SQL

DROP TABLE ml.recommender_system.customer_features;

Python

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.drop_table(
  name='ml.recommender_system.customer_features'
)