View a markdown version of this page

Skema grafik properti - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Skema grafik properti

neptune.graph.pg_schema()Prosedur ini memberikan gambaran komprehensif tentang struktur grafik properti Anda. Ini mengembalikan semua label node, label tepi, properti dengan tipe data mereka, dan label tripel ({~from, ~type, ~to}pola yang menggambarkan bagaimana tipe node terhubung melalui tipe tepi).

Prosedur ini saat ini hanya tersedia melalui titik akhir OpenCypher dan menemukan skema untuk semua data grafik properti.

Gunakan prosedur ini untuk tugas-tugas seperti:

  • Pembuatan kueri AI dan LLM - Berikan LLM struktur grafik yang mereka butuhkan untuk menghasilkan kueri Cypher yang valid dari bahasa alami (Text-to-Cypher, aplikasi GraphRag).

  • Visualisasi dan eksplorasi grafik — Alat seperti Graph Explorer menggunakan informasi skema untuk membuat representasi visual interaktif dari data grafik tanpa memindai seluruh database.

  • Penemuan skema aplikasi — Aplikasi yang perlu memahami struktur grafik saat startup, seperti generator skema GraphQL atau alat validasi data.

Perbandingan dengan Neptune Analytics

Dalam Neptune Analytics, neptune.graph.pg_schema() sinkron. Ini menghitung skema pada setiap panggilan.

Di Neptune Database, Anda secara eksplisit memicu perhitungan skema asinkron dengan memanggilneptune.graph.pg_schema.compute(), yang segera kembali. Perhitungan berjalan di latar belakang saat Anda melakukan polling untuk penyelesaian menggunakanneptune.graph.pg_schema(). Setelah dihitung, Neptunus mempertahankan skema dan mengembalikannya secara instan pada pembacaan berikutnya tanpa perhitungan ulang. Hasil paruh juga tersedia saat perhitungan masih berlangsung. Anda juga dapat menghentikan komputasi yang sedang berjalan dan melanjutkannya nanti.

Perbandingan dengan Graph Ringkasan API

Grap h Ringkasan API tidak menyediakan rangkap tiga label atau tipe data properti. Prosedur skema grafik properti mengisi celah ini. Tiga label menunjukkan pola hubungan tertentu dalam grafik Anda. Misalnya, a Person terhubung ke Company melalui worksAt tepi. Informasi ini sangat penting bagi LLM untuk menghasilkan kueri yang benar secara semantik.

Prasyarat

Versi mesin

Prosedur skema grafik properti memerlukan mesin Neptune versi 1.4.8.0 atau yang lebih baru.

Izin IAM

Tindakan IAM berikut diperlukan untuk setiap operasi skema:

  • CALL neptune.graph.pg_schema()— membutuhkanneptune-db:ReadDataViaQuery.

  • CALL neptune.graph.pg_schema.compute()- membutuhkan neptune-db:ReadDataViaQuery danneptune-db:WriteDataViaQuery.

  • CALL neptune.graph.pg_schema.stop()- membutuhkan neptune-db:ReadDataViaQuery danneptune-db:WriteDataViaQuery.

stop()Operasi compute() dan memerlukan izin menulis karena mereka memodifikasi status internal yang digunakan untuk cache dan mempertahankan skema.

contoh Contoh kebijakan IAM

Kebijakan berikut memberikan izin minimum yang diperlukan untuk semua operasi skema:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "neptune-db:ReadDataViaQuery", "neptune-db:WriteDataViaQuery" ], "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-resource-id/*" }] }

Untuk memberikan akses read-only ke skema (tanpa kemampuan untuk memicu komputasi), gunakan saja. neptune-db:ReadDataViaQuery

Contoh penulis dan pembaca

Anda dapat memicu komputasi skema hanya pada instance penulis. Instans replika baca dapat membaca skema (yang direplikasi dari penulis) tetapi tidak dapat menjalankan compute() ataustop().

Referensi API

Baca skema

Mengambil skema saat ini dan status komputasi.

Sintaksis:

AWS CLI
aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema()"
SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.execute_open_cypher_query( openCypherQuery='CALL neptune.graph.pg_schema()' ) print(response)
awscurl
awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema()'

Perilaku: Kem bali segera dengan skema dan status saat ini. Selalu tidak memblokir. Jika tidak ada skema yang dihitung, mengembalikan state: "NotStarted" dengan bidang skema kosong. Jika komputasi sedang berlangsung, mengembalikan hasil parSIAL dengan state:"InProgress".

Format tanggapan:

Respons berisi objek skema dengan bidang berikut:

Objek status:

  • state(String) — Status siklus hidup saat ini: NotStartedInProgress,,Completed,Stopped, Failed

  • concurrency(String) — Jumlah utas yang digunakan untuk perhitungan. 0 berarti otomatis (ditentukan berdasarkan perangkat keras). Rentang: 1 (terendah) hingga 16 (tertinggi).

  • lastComputedTimestamp(String) — ISO-8601 Stempel waktu UTC dari perhitungan terakhir yang berhasil (mis.,) 2026-05-29T08:00:00Z

  • progressPercentage(String) — Kemajuan komputasi: 0 saat tidak dimulai, 0—99 selama komputasi, 100 saat selesai

  • errorMessage(String) — Hadir hanya ketika permintaan ditolak atau perhitungan gagal. Menjelaskan alasannya.

Objek skema:

  • nodeLabels— Array semua label simpul unik dalam grafik

  • edgeLabels— Array semua label tepi unik dalam grafik

  • nodeLabelDetails— Untuk setiap label node: properti dan tipe datanya

  • edgeLabelDetails— Untuk setiap label tepi: properti dan tipe datanya

  • labelTriples— Array pola hubungan: {~from, ~type, ~to} menjelaskan jenis simpul mana yang terhubung melalui tipe tepi mana

Jenis data yang didukung: StringInt,Long,Double,Bool, Date

Jika properti memiliki beberapa tipe data di seluruh node yang berbeda (misalnya, beberapa node menyimpan age sebagai Int dan lainnya sebagaiString), semua tipe yang diamati terdaftar dalam datatypes array.

Skema komputasi

Memicu perhitungan skema latar belakang.

Sintaksis:

AWS CLI
aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema.compute()"

Dengan parameter konkurensi opsional:

aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema.compute({concurrency: 2})"
SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.execute_open_cypher_query( openCypherQuery='CALL neptune.graph.pg_schema.compute()' ) print(response)
awscurl
awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema.compute()'

Dengan parameter konkurensi opsional:

awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema.compute({concurrency: 2})'

Tindakan IAM diperlukan: dan neptune-db:ReadDataViaQuery neptune-db:WriteDataViaQuery

Parameter:

  • concurrency(Integer, opsional) — Jumlah utas untuk perhitungan latar belakang. 0 (default) = ditentukan secara otomatis berdasarkan perangkat keras. Rentang: 1 (terendah) hingga 16 (tertinggi). Gunakan nilai yang lebih rendah pada instans yang lebih kecil untuk mengurangi dampak sumber daya.

Perilaku:

  • Kembali segera dengan status saat ini. Komputasi berjalan secara asinkron di latar belakang.

  • Jika dipanggil saat status adaStopped, perhitungan dilanjutkan dari tempat tinggalnya.

  • Jika dipanggil saat status adaCompleted, mulailah perhitungan ulang baru. Skema sebelumnya terus menyajikan pembacaan sampai perhitungan baru selesai.

  • Jika dipanggil ketika komputasi sudah adaInProgress, Neptunus menolak permintaan dengan pesan kesalahan.

  • Jika dipanggil selama beban massal aktif, Neptunus menolak permintaan dengan pesan kesalahan.

Respon: Mengem balikan objek status yang menunjukkan status: "InProgress" dengan progressPercentage bidang concurrency dan.

Hentikan perhitungan skema

Menghentikan komputasi latar belakang yang sedang berjalan.

Sintaksis:

AWS CLI
aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema.stop()"
SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.execute_open_cypher_query( openCypherQuery='CALL neptune.graph.pg_schema.stop()' ) print(response)
awscurl
awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema.stop()'

Tindakan IAM diperlukan: dan neptune-db:ReadDataViaQuery neptune-db:WriteDataViaQuery

Perilaku:

  • Menghentikan komputasi yang sedang berjalan. Kemajuan disimpan sehingga dapat dilanjutkan dari tempat tinggalnya ketika Anda menelepon compute() lagi.

  • Komputasi yang dihentikan tidak dil anjutkan secara otomatis saat mesin restart. Anda harus menelepon secara eksplisitcompute().

Respon: Mengembalikan objek status yang menunjukkan state: "Stopped" dengan arusprogressPercentage.

Menggunakan YIELD dengan hasil skema

Anda dapat menggunakan YIELD untuk mengekstrak bidang skema dan menggabungkannya dengan kueri lain. Contoh berikut mengambil semua label node dan menghitung jumlah node untuk setiap label. collSort()Fungsi mengurutkan daftar menurut abjad:

CALL neptune.graph.pg_schema() YIELD schema WITH schema.nodeLabels as nl UNWIND collSort(nl) as label MATCH (n) WHERE label in labels(n) RETURN label, COUNT(n) as count

Contoh output:

{ "results": [{ "label": "airport", "count": 3503 }, { "label": "continent", "count": 7 }, { "label": "country", "count": 237 }, { "label": "version", "count": 1 }] }

Siklus hidup komputasi skema

Operasi asinkron

Komputasi skema adalah operasi asinkron. Ketika Anda menelep neptune.graph.pg_schema.compute() on, itu segera kembali dengan status saat ini. Perhitungan berjalan di latar belakang. Anda melakukan polling untuk kemajuan dan penyelesaian dengan memanggilneptune.graph.pg_schema(), yang mengembalikan status saat ini danprogressPercentage.

Status

Komputasi skema bergerak melalui status berikut:

  • NotStarted- Belum ada skema yang dihitung. pg_schema()mengembalikan skema kosong.

  • InProgress— Komputasi latar belakang sedang berjalan. pg_schema()mengembalikan hasil parSIAL (penyatuan skema lengkap terakhir dan penemuan dari perhitungan saat ini).

  • Completed— Perhitungan selesai dengan sukses. Skema lengkap tersedia.

  • Stopped— Komputasi dihentikan, baik dengan menelep stop() on atau karena restart mesin menyela. Hasil paruh tersedia. Kemajuan disimpan sehingga komputasi dapat dilanjutkan dari tempat tinggalnya saat Anda menelepon. compute()

  • Failed- Komputasi mengalami kesalahan. Skema terakhir yang berhasil dihitung (jika ada) tetap tersedia.

Perilaku ketekunan dan restart

Skema yang dihitung dipertahankan dan selamat dari restart mesin. Perilaku restart tergantung pada status pada saat restart:

  • InProgress- Jika mesin restart selama komputasi, komputasi beralih ke. Stopped Panggil compute() untuk melanjutkan dari tempat tinggalnya. Kemajuan dipertahankan dan perhitungan berlanjut dari pos pemeriksaan terakhirnya.

  • Stopped— Perhitungan tidak dilanjutkan secara otomatis. Anda harus menelepon compute() untuk melanjutkan dari tempat tinggalnya.

  • Completed— Skema dimuat dan tersedia segera.

Hasil paruh

Saat komputasi sedang berlangsung, pg_schema() mengembalikan hasil parSIAL. Ini termasuk skema yang telah selesai sebelumnya digabungkan dengan label, properti, dan rangkap tiga yang ditemukan sejauh ini dalam perhitungan saat ini. Ini berarti Anda tidak perlu menunggu perhitungan penuh untuk selesai sebelum mengambil informasi skema yang berguna.

Replika baca

Instans replika baca dapat membaca skema menggunakanCALL neptune.graph.pg_schema(). Neptunus mereplikasi skema dari instance penulis dan membuatnya tersedia pada replika segera saat elemen skema ditemukan pada penulis.

Replika baca tidak dapat dijalankan compute() ataustop(). Panggilan ini mengembalikan kesalahan:

  • compute()"Schema cannot be computed on read replica"

  • stop()"Schema compute cannot be stopped on read replica"

Praktik terbaik

  • Hitung ulang setelah mutasi — Skema tidak diperbarui secara otomatis saat data berubah. Hitung ulang skema setelah pemuatan massal atau mutasi data yang signifikan. Gunakan lastComputedTimestamp bidang untuk menentukan apakah skema sudah usang relatif terhadap perubahan terbaru dalam grafik Anda.

  • Konkurensi — Nilai konkurensi default (0) secara otomatis menyesuaikan dengan perangkat keras instans Anda. Untuk sebagian besar beban kerja, ini adalah pengaturan yang disarankan. Jika perhitungan latar belakang memengaruhi beban kerja kueri Anda, tentukan nilai yang lebih rendah (misalnya, 1 atau 2) untuk mengurangi penggunaan sumber daya.

  • Berhenti dan lanjutkan — Jika perhitungan latar belakang memengaruhi beban kerja kueri Anda, hentikan stop() dan lanjutkan nanti selama periode lalu lintas rendah dengan menelep compute() on lagi. Perhitungan berlanjut dari tempat tinggalnya.

  • Tangani restart dengan anggun — Jika mesin restart saat komputasi skema sedang berlangsung, komputasi beralih ke. Stopped Panggil compute() untuk melanjutkan dari tempat tinggalnya. Kemajuan dipertahankan.

  • Basis data besar — Untuk database dengan volume penyimpanan besar (beberapa TB), perhitungan skema penuh mungkin membutuhkan waktu yang lama. Anda dapat memulai komputasi, membiarkannya berjalan hingga 10-20% kemajuan, lalu berhenti. Hasil parSIAL yang dikumpulkan selama jendela ini menyediakan sampel skema yang berguna dengan banyak label, properti, dan rangkap tiga yang sudah ditemukan. Baca skema parSIAL dengan pg_schema() saat perhitungan sedang berlangsung atau setelah berhenti. Lanjutkan nanti ketika beban kerja Anda memungkinkan.

Batasan

  • Penghapusan memerlukan komputasi ulang — Label, properti, dan rangkap tiga yang dihapus hanya dihapus dari skema setelah perhitungan ulang penuh berikutnya. Sampai saat itu, elemen yang dihapus mungkin masih muncul dalam hasil skema.

  • OpenCypher only — Anda dapat memanggil prosedur ini hanya melalui titik akhir kueri OpenCypher.

  • Tidak dapat menghitung selama pemuatan massal — Neptunus menolak perhitungan skema saat operasi beban massal aktif. Komputasi pemicu setelah beban massal selesai.

Output sampel

Contoh berikut menunjukkan keluaran skema untuk dataset rute udara:

awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema()'
{ "results": [{ "schema": { "edgeLabelDetails": { "route": { "properties": { "dist": ["Int"] } }, "contains": { "properties": {} } }, "edgeLabels": ["route", "contains"], "status": { "concurrency": "16", "lastComputedTimestamp": "2026-06-04T23:58:17Z", "state": "Completed", "progressPercentage": "100" }, "nodeLabels": ["version", "continent", "airport", "country"], "labelTriples": [{ "~type": "route", "~from": "airport", "~to": "airport" }, { "~type": "contains", "~from": "country", "~to": "airport" }, { "~type": "contains", "~from": "continent", "~to": "airport" }], "nodeLabelDetails": { "continent": { "properties": { "type": ["String"], "code": ["String"], "desc": ["String"] } }, "airport": { "properties": { "type": ["String"], "city": ["String"], "icao": ["String"], "code": ["String"], "country": ["String"], "lat": ["Double"], "longest": ["Int"], "runways": ["Int"], "desc": ["String"], "lon": ["Double"], "region": ["String"], "elev": ["Int"] } }, "country": { "properties": { "type": ["String"], "code": ["String"], "desc": ["String"] } }, "version": { "properties": { "date": ["String"], "desc": ["String"], "author": ["String"], "type": ["String"], "code": ["String"] } } } } }] }