Trong bài trước đã hướng dẫn sử dụng Hive phân tích dữ liệu chứng khoán. Trong ví dụ đó, tôi sử dụng lệnh “load data local inpath” để đưa dữ liệu từ thư mục lưu trữ trên máy local vào tảng dữ liệu đã được tạo sẵn trong hive. Lệnh trên cũng đồng thời tạo thư mục NYSE trong workspace của Hive trên HDFS. Với lệnh trên, tôi phân vân rằng liệu với dữ liệu streaming (sử dụng Apache Flume liên tục đẩy dữ liệu vào HDFS) thì làm thế nào để Hive có thể đọc được (dữ liệu mới được tự động đẩy vào Hive table để phân tích). Rất may Hive đã làm cho tôi việc này. Để hiểu rõ hơn cơ chế đọc dữ liệu của Hive, tôi đã test một trường hợp sau:
Bước 1: Lây dữ liệu thử nghiệm
Tôi lấy dữ liệu thử nghiệm từ https://github.com/Prokopp/the-free-hive-book sử dụng file wdi_data.tsv.gz
Với dữ liệu trên, đầu tiên tôi tạo bảng trong Hive với đường dẫn được khai báo trước như sau:
CREATE EXTERNAL TABLE wdi
(
country_name STRING,
country_code STRING,
indicator_name STRING,
indicator_code STRING,
`1960` FLOAT, `1961` FLOAT, `1962` FLOAT, `1963` FLOAT, `1964` FLOAT,
`1965` FLOAT, `1966` FLOAT, `1967` FLOAT, `1968` FLOAT, `1969` FLOAT,
`1970` FLOAT, `1971` FLOAT, `1972` FLOAT, `1973` FLOAT, `1974` FLOAT,
`1975` FLOAT, `1976` FLOAT, `1977` FLOAT, `1978` FLOAT, `1979` FLOAT,
`1980` FLOAT, `1981` FLOAT, `1982` FLOAT, `1983` FLOAT, `1984` FLOAT,
`1985` FLOAT, `1986` FLOAT, `1987` FLOAT, `1988` FLOAT, `1989` FLOAT,
`1990` FLOAT, `1991` FLOAT, `1992` FLOAT, `1993` FLOAT, `1994` FLOAT,
`1995` FLOAT, `1996` FLOAT, `1997` FLOAT, `1998` FLOAT, `1999` FLOAT,
`2000` FLOAT, `2001` FLOAT, `2002` FLOAT, `2003` FLOAT, `2004` FLOAT,
`2005` FLOAT, `2006` FLOAT, `2007` FLOAT, `2008` FLOAT, `2009` FLOAT,
`2010` FLOAT, `2011` FLOAT, `2012` FLOAT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/user/hive/warehouse/wdi';
Chú ý lúc này bảng wdi chưa có dữ liệu
Sau lệnh này, tôi kiểm tra thư mục HDFS thấy tự động tạo thư mục wdi theo đường dẫn /user/hive/warehouse và trong thư mục không có file nào
Tiếp theo tôi sử dụng HDFS đẩy file wdi_data.tsv.gz vào HDFS trong thư mục /user/hive/warehouse/wdi. Lúc này cấu trúc thư mục có dạng như sau: /user/hive/warehouse/wdi/wdi_data.tsv.gz
Cuối cùng tôi vào hive sử dụng lệnh
Hive> select * from wdi;
Câu lệnh trên cho tôi kết quả là các row dữ liệu trong bảng wdi
Như vậy, Hive đã tự động đọc file wdi_data.tsv.gz và load dữ liệu vào bảng wdi
Bước 2: Kiểm tra việc cập nhật file
Tiếp theo, tôi tạo một file mới là wdi_truongpm_data.tsv.gz với chỉ một dòng dữ liệu (thêm một dòng dữ liệu nào đó mà dễ nhận biết)
Tiếp tục đẩy file vừa tạo vào thư mục /user/hive/warehouse/wdi trong HDFS. Lúc này HDFS có dạng /user/hive/warehouse/wdi/wdi_truongpm_data.tsv.gz
Sử dụng lệnh trong hive để tìm dòng dữ liệu trong file wdi_truongpm_data.tsv.gz
hive> select * from wdi where country_name='Afghanistan' and country_code='AFG' and indicator_code='EG.ELC.ACCS.ZS';
Tôi thấy rằng dòng dữ liệu tôi thêm vào file wdi_truongpm_data.tsv.gz cũng có ở kết quả của câu query trên.
Vậy là Khi cập nhật thêm file mới (cấu trúc không đổi) vào thư mục tương ứng với bảng thì Hive tự động đọc dữ liệu của file mới vừa thêm
Không có nhận xét nào :
Đăng nhận xét