Menulis pengklasifikasi kustom - AWS Glue

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

Menulis pengklasifikasi kustom

Anda dapat menyediakan pengklasifikasi kustom untuk mengklasifikasikan data Anda di AWS Glue. Anda dapat membuat pengklasifikasi kustom menggunakan pola grok, tag XHTML, JavaScript Object Notation (JSON), atau nilai yang dipisahkan koma (CSV). Sebuah crawler AWS Glue memanggil sebuah pengklasifikasi kustom. Jika pengklasifikasi tersebut mengakui data, maka ia akan mengembalikan klasifikasi dan skema data kepada crawler. Anda mungkin perlu menentukan pengklasifikasi kustom jika data Anda tidak cocok dengan pengklasifikasi bawaan, atau jika Anda ingin menyesuaikan tabel yang dibuat oleh crawler tersebut.

Untuk informasi lebih lanjut tentang membuat distribusi menggunakan konsol AWS Glue, lihat Bekerja dengan pengklasifikasi di konsol AWS Glue.

AWS Glue menjalankan pengklasifikasi tersuai sebelum pengklasifikasi bawaan, dalam susunan yang anda tentukan. Ketika sebuah crawler menemukan pengklasifikasi yang cocok dengan data, string klasifikasi dan skema digunakan dalam definisi tabel yang ditulis ke AWS Glue Data Catalog.

Menulis pengklasifikasi kustom grok

Grok adalah alat yang digunakan untuk mengurai data tekstual mengingat pola yang cocok. Pola grok adalah seperangkat ekspresi reguler (regex) yang diberi nama yang digunakan untuk mencocokkan data satu baris pada suatu waktu. AWS Glue menggunakan pola grok untuk menyimpulkan skema data Anda. Ketika pola grok cocok dengan data Anda, AWS Glue akan menggunakan pola tersebut untuk menentukan struktur data Anda dan memetakan ke dalam bidang.

AWS Glue menyediakan banyak pola bawaan, atau Anda dapat menentukannya sendiri. Anda dapat membuat pola grok dengan menggunakan pola bawaan dan pola kustom dalam definisi pengklasifikasi kustom Anda. Anda dapat menyesuaikan pola grok untuk mengklasifikasikan format file teks kustom.

catatan

Pengklasifikasi kustom grok AWS Glue menggunakan pustaka serialisasi GrokSerDe untuk tabel yang dibuat di AWS Glue Data Catalog. Jika Anda menggunakan AWS Glue Data Catalog dengan Amazon Athena, Amazon EMR, atau Redshift Spectrum, periksa dokumentasi tentang layanan tersebut untuk informasi tentang support GrokSerDe. Saat ini, Anda mungkin mengalami masalah dalam meng-kueri tabel yang dibuat dengan GrokSerDe dari Amazon EMR dan Redshift Spectrum.

Berikut ini adalah sintaksis dasar untuk komponen pola grok:

%{PATTERN:field-name}

Data yang cocok dengan nama PATTERN dipetakan ke kolom field-name dalam skema, dengan tipe data default string. Opsional, tipe data untuk bidang dapat diberikan ke byte, boolean, double, short, int, long, atau float dalam skema yang dihasilkan.

%{PATTERN:field-name:data-type}

Misalnya, untuk memberikan bidang num ke tipe data int, Anda dapat menggunakan pola ini:

%{NUMBER:num:int}

Pola dapat terdiri dari pola lainnya. Misalnya, Anda dapat memiliki sebuah pola untuk stempel waktu SYSLOG yang ditentukan berdasarkan pola untuk bulan, tanggal, dan waktu (misalnya, Feb 1 06:25:43). Untuk data ini, Anda dapat menentukan pola berikut:

SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
catatan

Pola grok dapat memproses hanya satu baris pada satu waktu. Pola multi-baris tidak didukung. Selain itu, jeda baris dalam pola tidak didukung.

Nilai pengklasifikasi kustom di AWS Glue

Ketika Anda menentukan pengklasifikasi grok, Anda menyediakan nilai-nilai berikut untuk AWS Glue untuk membuat pengklasifikasi kustom.

Nama

Nama pengklasifikasi.

Klasifikasi

String teks yang ditulis untuk menjelaskan format data yang diklasifikasikan; misalnya, special-logs.

Pola Grok

Serangkaian pola yang diterapkan ke penyimpanan data untuk menentukan apakah ada kecocokan. Pola-pola ini berasal dari pola bawaan AWS Glue dan pola kustom apa pun yang Anda tetapkan.

Berikut ini adalah contoh pola grok:

%{TIMESTAMP_ISO8601:timestamp} \[%{MESSAGEPREFIX:message_prefix}\] %{CRAWLERLOGLEVEL:loglevel} : %{GREEDYDATA:message}

Ketika data cocok dengan TIMESTAMP_ISO8601, kolom skema timestamp dibuat. Perilaku ini mirip untuk pola lain yang diberi nama dalam contoh.

Pola kustom

Pola kustom opsional yang Anda tetapkan. Pola-pola ini direferensikan oleh pola grok yang mengklasifikasikan data Anda. Anda dapat me-referensi pola kustom ini dalam pola grok yang diterapkan ke data Anda. Setiap pola komponen kustom harus ada pada baris terpisah. Sinstaksis ekspresi reguler (regex) digunakan untuk menentukan pola.

Berikut ini adalah contoh penggunaan pola kustom:

CRAWLERLOGLEVEL (BENCHMARK|ERROR|WARN|INFO|TRACE) MESSAGEPREFIX .*-.*-.*-.*-.*

Pola bernama kustom yang pertama, CRAWLERLOGLEVEL, adalah kecocokan ketika data cocok dengan salah satu string yang disebutkan satu per satu. Pola kustom kedua, MESSAGEPREFIX, mencoba mencocokkan string prefiks pesan.

AWS Glue menyimpan jejak waktu pembuatan, waktu update terakhir, dan versi pengklasifikasi Anda.

AWS Gluepola bawaan

AWS Glue menyediakan banyak pola umum yang dapat Anda gunakan untuk membangun sebuah pengklasifikasi kustom. Anda menambahkan sebuah pola bernama ke grok pattern dalam sebuah definisi pengklasifikasi.

Daftar berikut terdiri dari sebuah baris untuk setiap pola. Di setiap baris, nama pola diikuti definisinya. Sinstaksis ekspresi reguler (regex) digunakan untuk menentukan pola.

#<noloc>&GLU;</noloc> Built-in patterns USERNAME [a-zA-Z0-9._-]+ USER %{USERNAME:UNWANTED} INT (?:[+-]?(?:[0-9]+)) BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))) NUMBER (?:%{BASE10NUM:UNWANTED}) BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+)) BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b BOOLEAN (?i)(true|false) POSINT \b(?:[1-9][0-9]*)\b NONNEGINT \b(?:[0-9]+)\b WORD \b\w+\b NOTSPACE \S+ SPACE \s* DATA .*? GREEDYDATA .* #QUOTEDSTRING (?:(?<!\\)(?:"(?:\\.|[^\\"])*"|(?:'(?:\\.|[^\\'])*')|(?:`(?:\\.|[^\\`])*`))) QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``)) UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12} # Networking MAC (?:%{CISCOMAC:UNWANTED}|%{WINDOWSMAC:UNWANTED}|%{COMMONMAC:UNWANTED}) CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4}) WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2}) COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}) IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)? IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9]) IP (?:%{IPV6:UNWANTED}|%{IPV4:UNWANTED}) HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62}))*(\.?|\b) HOST %{HOSTNAME:UNWANTED} IPORHOST (?:%{HOSTNAME:UNWANTED}|%{IP:UNWANTED}) HOSTPORT (?:%{IPORHOST}:%{POSINT:PORT}) # paths PATH (?:%{UNIXPATH}|%{WINPATH}) UNIXPATH (?>/(?>[\w_%!$@:.,~-]+|\\.)*)+ #UNIXPATH (?<![\w\/])(?:/[^\/\s?*]*)+ TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+)) WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+ URIPROTO [A-Za-z]+(\+[A-Za-z+]+)? URIHOST %{IPORHOST}(?::%{POSINT:port})? # uripath comes loosely from RFC1738, but mostly from what Firefox # doesn't turn into %XX URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+ #URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)? URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]* URIPATHPARAM %{URIPATH}(?:%{URIPARAM})? URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})? # Months: January, Feb, 3, 03, 12, December MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b MONTHNUM (?:0?[1-9]|1[0-2]) MONTHNUM2 (?:0[1-9]|1[0-2]) MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]) # Days: Monday, Tue, Thu, etc... DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?) # Years? YEAR (?>\d\d){1,2} # Time: HH:MM:SS #TIME \d{2}:\d{2}(?::\d{2}(?:\.\d+)?)? # TIME %{POSINT<24}:%{POSINT<60}(?::%{POSINT<60}(?:\.%{POSINT})?)? HOUR (?:2[0123]|[01]?[0-9]) MINUTE (?:[0-5][0-9]) # '60' is a leap second in most time standards and thus is valid. SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?) TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]) # datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it) DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR} DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR} DATESTAMP_US %{DATE_US}[- ]%{TIME} DATESTAMP_EU %{DATE_EU}[- ]%{TIME} ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE})) ISO8601_SECOND (?:%{SECOND}|60) TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? TZ (?:[PMCE][SD]T|UTC) DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ} DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE} DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR} DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND} CISCOTIMESTAMP %{MONTH} %{MONTHDAY} %{TIME} # Syslog Dates: Month Day HH:MM:SS SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME} PROG (?:[\w._/%-]+) SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])? SYSLOGHOST %{IPORHOST} SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}> HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT} # Shortcuts QS %{QUOTEDSTRING:UNWANTED} # Log formats SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}: MESSAGESLOG %{SYSLOGBASE} %{DATA} COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{Bytes:bytes=%{NUMBER}|-}) COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent} COMMONAPACHELOG_DATATYPED %{IPORHOST:clientip} %{USER:ident;boolean} %{USER:auth} \[%{HTTPDATE:timestamp;date;dd/MMM/yyyy:HH:mm:ss Z}\] "(?:%{WORD:verb;string} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion;float})?|%{DATA:rawrequest})" %{NUMBER:response;int} (?:%{NUMBER:bytes;long}|-) # Log Levels LOGLEVEL ([A|a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)

Menulis XHTML pengklasifikasi kustom

XML mendefinisikan struktur sebuah dokumen dengan penggunaan tag dalam file. Dengan pengklasifikasi kustom XML, Anda dapat menentukan nama tag yang digunakan untuk menentukan sebuah baris.

Nilai pengklasifikasi kustom di AWS Glue

Ketika Anda menentukan pengklasifikasi XML, Anda menyediakan nilai-nilai berikut untuk AWS Glue untuk membuat pengklasifikasi. Bidang klasifikasi dari pengklasifikasi ini diatur ke xml.

Nama

Nama pengklasifikasi.

Tag baris

Nama tag XML yang mendefinisikan baris tabel dalam dokumen XML, tanpa kurung sudut < >. Nama harus sesuai dengan aturan tag dalam XML.

catatan

Elemen yang berisi data baris tidak dapat menjadi elemen kosong menutup-sendiri. Misalnya, elemen kosong ini tidak di-parsing oleh AWS Glue:

<row att1=”xx” att2=”yy” />

Elemen kosong dapat ditulis sebagai berikut:

<row att1=”xx” att2=”yy”> </row>

AWS Glue menyimpan jejak waktu pembuatan, waktu update terakhir, dan versi pengklasifikasi Anda.

Sebagai contoh, anggap bahwa Anda memiliki file XML berikut. Untuk membuat tabel AWS Glue yang hanya berisi kolom untuk penulis dan judul, buat sebuah pengklasifikasi di konsol AWS Glue dengan Tag baris sebagai AnyCompany. Kemudian tambahkan dan jalankan sebuah crawler yang menggunakan pengklasifikasi kustom ini.

<?xml version="1.0"?> <catalog> <book id="bk101"> <AnyCompany> <author>Rivera, Martha</author> <title>AnyCompany Developer Guide</title> </AnyCompany> </book> <book id="bk102"> <AnyCompany> <author>Stiles, John</author> <title>Style Guide for AnyCompany</title> </AnyCompany> </book> </catalog>

Menulis pengklasifikasi kustom JSON

JSON adalah sebuah format saling-mengganti-data. Ia mendefinisikan struktur data dengan pasangan nama-nilai atau daftar nilai-nilai yang diurutkan. Dengan pengklasifikasi kustom JSON, Anda dapat menentukan path JSON untuk sebuah struktur data yang digunakan untuk menentukan skema untuk tabel Anda.

Nilai pengklasifikasi kustom di AWS Glue

Ketika Anda menentukan pengklasifikasi JSON, Anda menyediakan nilai-nilai berikut untuk AWS Glue untuk membuat pengklasifikasi. Bidang klasifikasi dari pengklasifikasi ini diatur ke json.

Nama

Nama pengklasifikasi.

Path JSON

Sebuah path JSON yang mengarahkan ke sebuah objek yang digunakan untuk mendefinisikan skema tabel. Path JSON dapat ditulis dalam notasi dot atau notasi kurung. Operator berikut ini didukung:

Operasi Deskripsi
$ Elemen akar dari sebuah objek JSON. Ia mengawali semua ekspresi path
* Karakter wildcard. Sediakan di mana saja nama atau numerik yang diperlukan di path JSON.
.<name> Anak dinotasi-titik. Menentukan bidang anak dalam sebuah objek JSON.
['<name>'] Anak dinotasi-kurung. Menentukan bidang anak dalam sebuah objek JSON. Hanya satu bidang anak saja yang dapat ditentukan.
[<number>] Indeks array. Menentukan nilai array berdasarkan indeks.

AWS Glue menyimpan jejak waktu pembuatan, waktu update terakhir, dan versi pengklasifikasi Anda.

contoh Menggunakan pengklasifikasi JSON untuk menarik catatan dari array

Misalkan data JSON Anda adalah sebuah array catatan. Sebagai contoh, beberapa baris pertama dari file Anda mungkin terlihat seperti berikut ini:

[ { "type": "constituency", "id": "ocd-division\/country:us\/state:ak", "name": "Alaska" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:al\/cd:1", "name": "Alabama's 1st congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:al\/cd:2", "name": "Alabama's 2nd congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:al\/cd:3", "name": "Alabama's 3rd congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:al\/cd:4", "name": "Alabama's 4th congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:al\/cd:5", "name": "Alabama's 5th congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:al\/cd:6", "name": "Alabama's 6th congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:al\/cd:7", "name": "Alabama's 7th congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:ar\/cd:1", "name": "Arkansas's 1st congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:ar\/cd:2", "name": "Arkansas's 2nd congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:ar\/cd:3", "name": "Arkansas's 3rd congressional district" }, { "type": "constituency", "id": "ocd-division\/country:us\/state:ar\/cd:4", "name": "Arkansas's 4th congressional district" } ]

Saat Anda menjalankan sebuah crawler menggunakan pengklasifikasi JSON bawaan, seluruh file digunakan untuk menentukan skema. Karena Anda tidak menentukan path JSON, crawler memperlakukan data sebagai satu objek, yaitu, hanya sebuah array. Sebagai contoh, skema tersebut mungkin terlihat seperti berikut ini:

root |-- record: array

Namun demikian, untuk membuat skema yang didasarkan pada setiap catatan dalam array JSON, buatlah sebuah pengklasifikasi JSON kustom dan tentukan path JSON sebagai $[*]. Bila Anda menentukan path JSON ini, pengklasifikasi akan mengambil data dari semua 12 catatan dalam array untuk menentukan skema. Skema yang dihasilkan berisi bidang terpisah untuk setiap objek, mirip dengan contoh berikut ini:

root |-- type: string |-- id: string |-- name: string
contoh Menggunakan pengklasifikasi JSON untuk memeriksa hanya bagian dari file

Misalkan data JSON Anda mengikuti pola file contoh JSON s3://awsglue-datasets/examples/us-legislators/all/areas.json yang diambil dari http://everypolitician.org/. Objek contoh dalam file JSON terlihat seperti berikut ini:

{ "type": "constituency", "id": "ocd-division\/country:us\/state:ak", "name": "Alaska" } { "type": "constituency", "identifiers": [ { "scheme": "dmoz", "identifier": "Regional\/North_America\/United_States\/Alaska\/" }, { "scheme": "freebase", "identifier": "\/m\/0hjy" }, { "scheme": "fips", "identifier": "US02" }, { "scheme": "quora", "identifier": "Alaska-state" }, { "scheme": "britannica", "identifier": "place\/Alaska" }, { "scheme": "wikidata", "identifier": "Q797" } ], "other_names": [ { "lang": "en", "note": "multilingual", "name": "Alaska" }, { "lang": "fr", "note": "multilingual", "name": "Alaska" }, { "lang": "nov", "note": "multilingual", "name": "Alaska" } ], "id": "ocd-division\/country:us\/state:ak", "name": "Alaska" }

Saat Anda menjalankan sebuah crawler menggunakan pengklasifikasi JSON bawaan, seluruh file digunakan untuk membuat skema. Anda mungkin mendapatkan skema seperti ini:

root |-- type: string |-- id: string |-- name: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- lang: string | | |-- note: string | | |-- name: string

Namun demikian, untuk membuat sebuah skema hanya menggunakan objek "id", buatlah sebuah pengklasifikasi JSON kustom dan tentukan path JSON sebagai $.id. Kemudian skema tersebut didasarkan pada bidang "id" saja:

root |-- record: string

Beberapa baris pertama data yang diekstraksi dengan skema ini akan terlihat seperti ini:

{"record": "ocd-division/country:us/state:ak"} {"record": "ocd-division/country:us/state:al/cd:1"} {"record": "ocd-division/country:us/state:al/cd:2"} {"record": "ocd-division/country:us/state:al/cd:3"} {"record": "ocd-division/country:us/state:al/cd:4"} {"record": "ocd-division/country:us/state:al/cd:5"} {"record": "ocd-division/country:us/state:al/cd:6"} {"record": "ocd-division/country:us/state:al/cd:7"} {"record": "ocd-division/country:us/state:ar/cd:1"} {"record": "ocd-division/country:us/state:ar/cd:2"} {"record": "ocd-division/country:us/state:ar/cd:3"} {"record": "ocd-division/country:us/state:ar/cd:4"} {"record": "ocd-division/country:us/state:as"} {"record": "ocd-division/country:us/state:az/cd:1"} {"record": "ocd-division/country:us/state:az/cd:2"} {"record": "ocd-division/country:us/state:az/cd:3"} {"record": "ocd-division/country:us/state:az/cd:4"} {"record": "ocd-division/country:us/state:az/cd:5"} {"record": "ocd-division/country:us/state:az/cd:6"} {"record": "ocd-division/country:us/state:az/cd:7"}

Untuk menciptakan sebuah skema berdasarkan objek yang benar-benar di-nest, seperti "identifier," dalam file JSON, Anda dapat membuat pengklasifikasi JSON kustom dan menentukan path JSON sebagai $.identifiers[*].identifier. Meskipun skema ini mirip dengan contoh sebelumnya, tetapi ia didasarkan pada objek yang berbeda dalam file JSON tersebut.

Skema ini terlihat seperti berikut:

root |-- record: string

Mencantumkan beberapa baris pertama data dari tabel menunjukkan bahwa skema didasarkan pada data dalam objek "identifier":

{"record": "Regional/North_America/United_States/Alaska/"} {"record": "/m/0hjy"} {"record": "US02"} {"record": "5879092"} {"record": "4001016-8"} {"record": "destination/alaska"} {"record": "1116270"} {"record": "139487266"} {"record": "n79018447"} {"record": "01490999-8dec-4129-8254-eef6e80fadc3"} {"record": "Alaska-state"} {"record": "place/Alaska"} {"record": "Q797"} {"record": "Regional/North_America/United_States/Alabama/"} {"record": "/m/0gyh"} {"record": "US01"} {"record": "4829764"} {"record": "4084839-5"} {"record": "161950"} {"record": "131885589"}

Untuk menciptakan sebuah tabel berdasarkan objek yang benar-benar di-nest lainnya, seperti bidang "name" dalam array "other_names" dalam file JSON, Anda dapat membuat pengklasifikasi JSON kustom dan menentukan path JSON sebagai $.other_names[*].name. Meskipun skema ini mirip dengan contoh sebelumnya, tetapi ia didasarkan pada objek yang berbeda dalam file JSON tersebut. Skema ini terlihat seperti berikut:

root |-- record: string

Mencantumkan beberapa baris pertama data dalam tabel menunjukkan bahwa ia didasarkan pada data dalam objek "name" dalam array "other_names":

{"record": "Alaska"} {"record": "Alaska"} {"record": "Аляска"} {"record": "Alaska"} {"record": "Alaska"} {"record": "Alaska"} {"record": "Alaska"} {"record": "Alaska"} {"record": "Alaska"} {"record": "ألاسكا"} {"record": "ܐܠܐܣܟܐ"} {"record": "الاسكا"} {"record": "Alaska"} {"record": "Alyaska"} {"record": "Alaska"} {"record": "Alaska"} {"record": "Штат Аляска"} {"record": "Аляска"} {"record": "Alaska"} {"record": "আলাস্কা"}

Menulis pengklasifikasi khusus CSV

Pengklasifikasi CSV khusus memungkinkan Anda menentukan tipe data untuk setiap kolom di bidang pengklasifikasi csv khusus. Anda dapat menentukan tipe data setiap kolom yang dipisahkan dengan koma. Dengan menentukan tipe data, Anda dapat mengganti tipe data yang disimpulkan crawler dan memastikan data akan diklasifikasikan dengan tepat.

Anda dapat mengatur SerDe untuk memproses CSV di pengklasifikasi, yang akan diterapkan di Katalog Data.

Saat membuat pengklasifikasi kustom, Anda juga dapat menggunakan kembali classifer untuk crawler yang berbeda.

  • Untuk file csv dengan hanya header (tanpa data), file-file ini akan diklasifikasikan sebagai UNKNOWN karena tidak cukup informasi yang disediakan. Jika Anda menentukan bahwa CSV 'Memiliki judul' di opsi judul Kolom, dan memberikan tipe data, kami dapat mengklasifikasikan file-file ini dengan benar.

Anda dapat menggunakan pengklasifikasi CSV kustom untuk menyimpulkan skema dari berbagai jenis data CSV. Atribut kustom yang dapat Anda berikan untuk pengklasifikasi Anda termasuk pembatas, opsi CSV, SerDe opsi tentang header, dan apakah akan melakukan validasi tertentu pada data.

Nilai pengklasifikasi kustom di AWS Glue

Ketika Anda menentukan pengklasifikasi CSV, Anda menyediakan nilai-nilai berikut untuk AWS Glue untuk membuat pengklasifikasi. Bidang klasifikasi dari pengklasifikasi ini diatur ke csv.

Nama pengklasifikasi

Nama pengklasifikasi.

CSV Serde

Menetapkan SerDe untuk memproses CSV di classifier, yang akan diterapkan dalam Katalog Data. Pilihannya adalah Open CSV SerDe, Lazy Simple SerDe, dan None. Anda dapat menentukan nilai None saat Anda ingin crawler melakukan deteksi.

Kolom pembatas

Sebuah simbol kustom untuk menunjukkan apa yang memisahkan masing-masing entri kolom pada baris. Berikan karakter unicode. Jika Anda tidak dapat mengetik pembatas Anda, Anda dapat menyalin dan menempelkannya. Ini berfungsi untuk karakter yang dapat dicetak, termasuk karakter yang tidak didukung oleh sistem Anda (biasanya ditampilkan sebagai □).

Simbol kutipan

Sebuah simbol kustom untuk menunjukkan apa yang menggabungkan konten ke dalam satu nilai kolom tunggal. Harus berbeda dari pembatas kolom. Berikan karakter unicode. Jika Anda tidak dapat mengetik pembatas Anda, Anda dapat menyalin dan menempelkannya. Ini berfungsi untuk karakter yang dapat dicetak, termasuk karakter yang tidak didukung oleh sistem Anda (biasanya ditampilkan sebagai □).

Judul kolom

Menunjukkan perilaku untuk bagaimana mendeteksi judul kolom dalam file CSV. Jika file CSV kustom Anda memiliki judul kolom, masukkan daftar pembatas koma judul kolom.

Pilihan pemrosesan: Izinkan file dengan kolom tunggal

Memungkinkan pemrosesan file yang hanya berisi satu kolom saja.

Pilihan pemrosesan: Buang spasi kosong sebelum mengidentifikasi nilai kolom

Menentukan apakah akan memotong nilai sebelum mengidentifikasi jenis nilai kolom.

Tipe data khusus - opsional

Masukkan tipe data khusus yang dipisahkan dengan koma. Menentukan tipe data kustom dalam file CSV. Jenis data khusus harus berupa tipe data yang didukung. Jenis data yang didukung adalah: “BINARY”, “BOOLEAN”, “DATE”, “DECIMAL”, “DOUBLE”, “FLOAT”, “INT”, “LONG”, “SHORT”, “STRING”, “TIMESTAMP”. Tipe data yang tidak didukung akan menampilkan kesalahan.