Khớp mẫu

Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Darryl Reeves, Ph.D.

Industry Assistant Professor, New York University

Nhận diện mẫu: ví dụ

 camis    |              name               | inspection_date | score | nta  | ... 
 ---------+---------------------------------+-----------------+-------+------+-----
 ...      | ...                             | ...             | ...   | ...  | ...
 41659848 | LA BRISA DEL CIBAO              | 01/30/2018      | 20    | QN26 | ...
 40961447 | MESON SEVILLA RESTAURANT        | 03/19/2019      | 50    | MN15 | ...
 50063071 | WA BAR                          | 05/23/2018      | 15    | MN17 | ...
 50034992 | EMPANADAS MONUMENTAL            | 06/21/2019      | 17    | MN35 | ...
 50095871 | ALPHONSO'S PIZZERIA & TRATTORIA | 01/16/2020      | 10    | MN28 | ...
 41104041 | THE SPARROW TAVERN              | 09/17/2019      | 13    | QN72 | ...
 50016937 | BURGER KING                     | 09/14/2018      | 12    | QN55 | ...
 50066469 | DARBAR'S CHICKEN & RIBS         | 08/07/2017      | 11    | QN55 | ...
 41195691 | F & J PINE RESTAURANT           | 05/02/2019      | 26    | BX49 | ...
 50015706 | EL RINCONCITO DE LOS SABORES    | 12/18/2019      | 20    | QN35 | ...
 ...      | ...                             | ..    | ...  | ...
1 https://www1.nyc.gov/site/planning/data-maps/open-data/dwn-nynta.page
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Nhận diện mẫu: ví dụ

Tiền tố hợp lệ cho mã NTA

  • MN - Manhattan
  • BK - Brooklyn
  • BX - Bronx
  • QN - Queens
  • SI - Staten Island
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Nhận diện mẫu: ví dụ

Kết quả bảng với khung đỏ đánh dấu một mã NTA không hợp lệ

Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Toán tử LIKE

SELECT * FROM restaurant_inspection WHERE nta LIKE 'QN544';
SELECT * FROM restaurant_inspection WHERE nta = 'QN544';
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Toán tử LIKE

Ký tự khớp mẫu

  • % - khớp chuỗi bất kỳ (0 ký tự trở lên)

  • _ (gạch dưới) - khớp đúng 1 ký tự

SELECT 
* 
FROM 
restaurant_inspection 
WHERE nta LIKE 'QN%';

 

 

 

SELECT 
* 
FROM 
restaurant_inspection 
WHERE nta LIKE 'QN%' 
AND nta NOT LIKE 'QN__';
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Biểu thức chính quy (RE)

  • So khớp mẫu với LIKE bị hạn chế
  • Cần mẫu cụ thể hơn
  • Biểu thức chính quy (RE) cho phép so khớp linh hoạt hơn
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Toán tử SIMILAR TO

  • Cung cấp chức năng khớp mẫu bổ sung
    SELECT 
      camis, name, inspection_date, score, nta 
    FROM 
      restaurant_inspection 
    WHERE nta SIMILAR TO 'QN%' AND nta NOT SIMILAR TO 'QN__';
    
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Cơ bản về RE

Ký tự đặc biệt Cách dùng RE mẫu Ví dụ khớp
\d khớp một chữ số (0-9) \d\d\d '345'
? khớp 0 hoặc 1 ký tự trước đó x\d? 'x5'
+ khớp 1 hoặc nhiều ký tự trước đó \d+ '10'
* khớp 0+ lần ký tự trước đó \d* '3081'
[] khớp ký tự bất kỳ trong ngoặc [a-z] 'f'
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Dùng RE với SIMILAR TO

SELECT 
    camis, name, inspection_date, score, nta 
FROM 
    restaurant_inspection 
WHERE nta SIMILAR TO 'QN%' AND nta NOT SIMILAR TO 'QN__';
SELECT 
    camis, name, inspection_date, score, nta 
FROM 
    restaurant_inspection 
WHERE 
    nta NOT SIMILAR TO '[A-Z][A-Z]\d\d';
 camis    |        name        | inspection_date | score | nta  
 ---------+--------------------+-----------------+-------+------
 41659848 | LA BRISA DEL CIBAO | 01/30/2018      | 20    | Q26
 41104041 | THE SPARROW TAVERN | 09/17/2019      | 13    | QN723
Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Ayo berlatih!

Làm sạch dữ liệu trong cơ sở dữ liệu PostgreSQL

Preparing Video For Download...