Menulis pengklasifikasi khusus untuk beragam format data - AWS Glue

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

Menulis pengklasifikasi khusus untuk beragam format data

Anda dapat menyediakan pengklasifikasi kustom untuk mengklasifikasikan data Anda di AWS Glue. Anda dapat membuat pengklasifikasi kustom menggunakan pola grok, XML tag, 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 Membuat pengklasifikasi menggunakan 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 AthenaEMR, Amazon, atau Redshift Spectrum, periksa dokumentasi tentang layanan tersebut untuk informasi tentang dukungan dari. GrokSerDe Saat ini, Anda mungkin mengalami masalah dalam menanyakan 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 khusus untuk grok classifier

Saat menentukan pengklasifikasi grok, Anda memberikan nilai berikut 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.

Pola 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 pengklasifikasi XML khusus

XMLmendefinisikan struktur dokumen dengan menggunakan tag dalam file. Dengan pengklasifikasi XML khusus, Anda dapat menentukan nama tag yang digunakan untuk menentukan baris.

Nilai pengklasifikasi khusus untuk XML pengklasifikasi

Saat Anda menentukan XML pengklasifikasi, Anda memberikan nilai berikut AWS Glue untuk membuat pengklasifikasi. Bidang klasifikasi dari pengklasifikasi ini diatur ke xml.

Nama

Nama pengklasifikasi.

Tag baris

Nama XML tag yang mendefinisikan baris tabel dalam XML dokumen, tanpa tanda kurung < > sudut. Nama harus mematuhi XML aturan untuk tag.

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.

Misalnya, Anda memiliki XML file 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 JSON khusus

JSONadalah format pertukaran data. Ia mendefinisikan struktur data dengan pasangan nama-nilai atau daftar nilai-nilai yang diurutkan. Dengan pengklasifikasi JSON kustom, Anda dapat menentukan JSON jalur ke struktur data yang digunakan untuk menentukan skema untuk tabel Anda.

Nilai pengklasifikasi khusus di AWS Glue

Saat Anda menentukan JSON pengklasifikasi, Anda memberikan nilai berikut AWS Glue untuk membuat pengklasifikasi. Bidang klasifikasi dari pengklasifikasi ini diatur ke json.

Nama

Nama pengklasifikasi.

JSONjalan

JSONJalur yang menunjuk ke objek yang digunakan untuk mendefinisikan skema tabel. JSONJalur dapat ditulis dalam notasi titik atau notasi braket. Operator berikut ini didukung:

Operator Deskripsi
$ Elemen akar suatu JSON objek. Ia mengawali semua ekspresi path
* Karakter wildcard. Tersedia di mana saja nama atau numerik diperlukan di JSON jalur.
.<name> Anak dinotasi-titik. Menentukan bidang anak dalam JSON objek.
['<name>'] Anak dinotasi-kurung. Menentukan bidang anak dalam JSON objek. 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 JSON classifier untuk menarik catatan dari array

Misalkan JSON data Anda adalah 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 crawler menggunakan JSON pengklasifikasi bawaan, seluruh file digunakan untuk menentukan skema. Karena Anda tidak menentukan JSON jalur, crawler memperlakukan data sebagai satu objek, yaitu hanya sebuah array. Sebagai contoh, skema tersebut mungkin terlihat seperti berikut ini:

root |-- record: array

Namun, untuk membuat skema yang didasarkan pada setiap catatan dalam JSON array, buat JSON pengklasifikasi khusus dan tentukan JSON jalurnya sebagai. $[*] Saat Anda menentukan JSON jalur ini, pengklasifikasi menginterogasi 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 JSON classifier untuk memeriksa hanya bagian dari file

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

{ "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 crawler menggunakan JSON pengklasifikasi 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, untuk membuat skema hanya menggunakan objek id "”, buat JSON pengklasifikasi khusus dan tentukan JSON jalurnya 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 membuat skema berdasarkan objek yang sangat bersarang, seperti "identifier,” dalam JSON file, Anda dapat membuat JSON pengklasifikasi khusus dan menentukan jalur sebagai. JSON $.identifiers[*].identifier Meskipun skema mirip dengan contoh sebelumnya, ini didasarkan pada objek yang berbeda dalam JSON file.

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 membuat tabel berdasarkan objek lain yang sangat bersarang, seperti bidang "name" dalam array "other_names" dalam JSON file, Anda dapat membuat JSON pengklasifikasi khusus dan menentukan JSON jalur sebagai. $.other_names[*].name Meskipun skema mirip dengan contoh sebelumnya, ini didasarkan pada objek yang berbeda dalam JSON file. 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 CSV khusus

CSVPengklasifikasi 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 diproses CSV di classifier, 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 CSV pengklasifikasi khusus untuk menyimpulkan skema berbagai jenis data. CSV Atribut kustom yang dapat Anda berikan untuk pengklasifikasi Anda termasuk pembatas, CSV SerDe opsi, opsi tentang header, dan apakah akan melakukan validasi tertentu pada data.

Nilai pengklasifikasi khusus di AWS Glue

Saat Anda menentukan CSV pengklasifikasi, Anda memberikan nilai berikut AWS Glue untuk membuat pengklasifikasi. Bidang klasifikasi dari pengklasifikasi ini diatur ke csv.

Nama pengklasifikasi

Nama pengklasifikasi.

CSVSerde

Menetapkan SerDe untuk diproses 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 bagaimana judul kolom harus dideteksi dalam CSV file. Jika CSV file kustom Anda memiliki judul kolom, masukkan daftar judul kolom yang dibatasi koma.

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.

Jenis 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 Jenis data yang tidak didukung akan menampilkan kesalahan.