Chủ đề của BDI302c - Dữ liệu lớn

BDI302c - Phần 6: Truy xuất dữ liệu lớn

Cách lấy dữ liệu ra phụ thuộc vào mô hình đã chọn khi lưu. Với kho khoá và giá trị, truy xuất gần như chỉ là đưa khoá vào và nhận bản ghi về. Với tài liệu kiểu MongoDB, lệnh find lọc được theo cả trường lồng nhau, còn đường ống tổng hợp nối nhiều bước xử lý thành một truy vấn. Với SQL, gom nhóm, ghép bảng hay lọc dòng vẫn viết như trên một máy, nhưng khi bảng đã chia phân vùng khắp cụm như dữ liệu trên HDFS ở Phần 3, phép ghép theo một khoá khác khoá phân vùng phải chuyển dòng qua mạng nên tốn kém hơn nhiều. Dữ liệu văn bản cần chỉ mục đảo, loại chỉ mục mà Solr dựng sẵn, để tìm theo từ khoá, kể cả từ đồng nghĩa. Bài thực hành đi qua những câu hỏi thật, như dân số trung bình của các hạt trong một bang. Ghép kết quả từ nhiều nguồn là việc của Phần 7.

Xem danh sách câu hỏi10 câu hỏi100% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

10Câu hỏi hiện có

Câu hỏi của chủ đề

10/10 câuHết danh sách
ASELECT user_table FROM username
BSELECT username FROM user_table
CSELECT username FROM user_table WHERE userId=1
DSELECT username FROM userId WHERE *
Lời giải
Đáp án đúng: "SELECT username FROM user_table". Cú pháp SQL cơ bản là SELECT danh sách cột FROM tên bảng; muốn lấy toàn bộ cột username của mọi dòng (bao nhiêu dòng cũng được) thì chỉ cần nêu cột username sau SELECT, tên bảng user_table sau FROM và không đặt điều kiện lọc nào. "SELECT user_table FROM username" đảo ngược vai trò: coi user_table là cột và username là bảng, trong khi không tồn tại bảng nào tên username nên câu lệnh báo lỗi. "SELECT username FROM user_table WHERE userId=1" đúng cú pháp nhưng mệnh đề WHERE lọc chỉ còn dòng có userId bằng 1, trả về đúng một giá trị admin chứ không phải cả cột. "SELECT username FROM userId WHERE *" sai hai chỗ: userId là một cột chứ không phải bảng, và sau WHERE phải là một biểu thức điều kiện, dấu sao không phải điều kiện hợp lệ.
Mở trang câu hỏi này →
A<query filter>
B<projection>
C<cursor modifier>
D<collection>
Lời giải

Đáp án đúng: "<projection> ". Trong SQL, mệnh đề SELECT quyết định những cột nào được trả về, tức phép chiếu (projection) trong đại số quan hệ. Trong lệnh find của MongoDB, tham số thứ hai là tài liệu projection, liệt kê trường nào được giữ lại hay bỏ đi trong kết quả (ví dụ đặt name bằng 1 để chỉ lấy trường name), nên nó tương đương SELECT. "<query filter>"là tham số thứ nhất, mô tả điều kiện chọn tài liệu như tuổi lớn hơn 18, tương ứng mệnh đề WHERE chứ không phải SELECT. "<cursor modifier>"là các phương thức nối sau con trỏ kết quả như sort, limit, skip, tương ứng ORDER BY và LIMIT trong SQL. "<collection> " là tên tập hợp tài liệu đang được truy vấn, giống tên bảng đứng sau FROM trong SQL.

Mở trang câu hỏi này →
3What is the global indexing table?4 lựa chọn
AA global table that uses a specific technique called indexing and the table uses an index as the primary key.
BAn index table in order to keep track of a given data type that might exist within multiple machines.
CAn index table in order to keep track of data records within one machine.
DAn index table in order to keep track of a given data type that might exist within one machine.
Lời giải
Đáp án đúng: "An index table in order to keep track of a given data type that might exist within multiple machines.". Trong hệ quản lý dữ liệu lớn phân tán, dữ liệu được chia mảnh (partition) ra nhiều máy; chỉ mục cục bộ (local index) chỉ biết bản ghi nằm đâu trong một máy, nên muốn tìm theo một thuộc tính phải hỏi tất cả các máy. Bảng chỉ mục toàn cục (global indexing table) ghi lại một loại dữ liệu hay một giá trị khoá có thể nằm ở những máy nào trong cụm, nhờ đó truy vấn được chuyển thẳng tới đúng các nút cần thiết. "A global table that uses a specific technique called indexing and the table uses an index as the primary key." sai vì chỉ diễn giải chữ nghĩa của cái tên; dùng chỉ mục làm khoá chính là chuyện của bảng nào cũng có, không nói lên vai trò theo dõi dữ liệu xuyên nhiều máy. "An index table in order to keep track of data records within one machine." mô tả chỉ mục cục bộ thông thường của một máy. "An index table in order to keep track of a given data type that might exist within one machine." cũng giới hạn trong một máy, nên mất đúng tính toàn cục là phạm vi của cả cụm.
Mở trang câu hỏi này →
AThe $match operator
BThe $filter function
CThe $lookup operator
DThe $group operator
Lời giải
Đáp án đúng: "The $match operator". Trong aggregation pipeline (đường ống tổng hợp) của MongoDB, $match là giai đoạn lọc tài liệu: nó nhận điều kiện theo cú pháp truy vấn giống find, chỉ cho những tài liệu thoả điều kiện đi tiếp sang các giai đoạn sau, và nên đặt sớm để tận dụng chỉ mục, giảm khối lượng xử lý. "The $filter function" là toán tử biểu thức dùng bên trong một giai đoạn như $project để lọc các phần tử của một mảng trong từng tài liệu, chứ không lọc chính các tài liệu. "The $lookup operator" thực hiện phép nối kiểu left outer join với một collection khác để ghép thêm dữ liệu. "The $group operator" gom tài liệu theo khoá _id và tính các giá trị tổng hợp như $sum, $avg, tương tự GROUP BY trong SQL, nên không phải công cụ lọc.
Mở trang câu hỏi này →
AThe language specifies the process of how to obtain the data.
BThe language specifies both the process of how to obtain the data and specifies what data to obtain.
CThe language specifies what data to obtain.
DA language specific declaration of data types in order to define the method of data retrieval.
Lời giải
Đáp án đúng: "The language specifies what data to obtain.". Ngôn ngữ truy vấn khai báo (declarative) như SQL, HiveQL hay Cypher chỉ yêu cầu người dùng mô tả kết quả muốn có: lấy cột nào, từ bảng nào, thoả điều kiện gì; còn cách lấy, như dùng chỉ mục nào, nối theo thứ tự nào, chạy song song ra sao, do bộ tối ưu truy vấn của hệ thống tự quyết. "The language specifies the process of how to obtain the data." là định nghĩa của ngôn ngữ thủ tục hay mệnh lệnh (imperative), nơi người viết phải chỉ ra từng bước như vòng lặp duyệt bản ghi. "The language specifies both the process of how to obtain the data and specifies what data to obtain." sai vì tinh thần khai báo chính là không bắt người dùng nêu quy trình. "A language specific declaration of data types in order to define the method of data retrieval." chỉ chơi chữ với từ declaration; khai báo kiểu dữ liệu là việc định nghĩa lược đồ, không phải đặc điểm của ngôn ngữ truy vấn khai báo.
Mở trang câu hỏi này →
6What is a subquery?3 lựa chọn
AA query statement within another query.
BA short query than normal.
CAn alternative query that acts as a substitute for another query.
Lời giải

Đáp án đúng: "A query statement within another query.". Subquery (truy vấn con) là một câu SELECT được lồng bên trong một câu truy vấn khác, đặt ở mệnh đề WHERE, FROM hay SELECT; kết quả của truy vấn con được truy vấn ngoài dùng làm điều kiện lọc, làm bảng tạm hoặc làm giá trị tính toán, chẳng hạn lọc các nhân viên có lương lớn hơn lương trung bình do truy vấn con tính ra. "A short query than normal." sai vì truy vấn con được nhận diện bằng vị trí lồng nhau, không bằng độ dài; nó có thể dài và phức tạp hơn cả truy vấn ngoài. "An alternative query that acts as a substitute for another query." sai vì truy vấn con không thay thế truy vấn nào mà cung cấp kết quả trung gian cho truy vấn chứa nó; nhiều truy vấn con có thể viết lại thành phép JOIN tương đương, nhưng đó là một cách viết khác chứ không phải định nghĩa của subquery.

Mở trang câu hỏi này →
Adb.userIndex.find({email:{$gt:24}}, {_id:0})
Bdb.email.find({userIndex:{$gt:24}}, {email:1, _id:0})
Cdb.userIndex.find({email:{$lte:24}}, {_id:0})
Ddb.email.find({userIndex:{$lte:24}}, {email:1, _id:0})
Lời giải

Đáp án đúng: "

Lời giải
db.email.find({
  userIndex:{
    $gt:24
  }
}

, {email:1, _id:0})". Trong MongoDB, lệnh find nhận hai đối số: điều kiện lọc (query) và phép chiếu (projection). Yêu cầu là lọc theo trường userIndex lớn hơn 24 nên điều kiện phải là userIndex với toán tử $gt, và chỉ lấy email nên projection đặt email bằng 1 và tắt _id bằng 0. "

Lời giải
db.userIndex.find({
  email:{
    $gt:24
  }
}

, {_id:0})" đặt điều kiện lên email, so một địa chỉ thư với số 24, và projection trả mọi trường trừ _id. "

Lời giải
db.userIndex.find({
  email:{
    $lte:24
  }
}

, {_id:0})" vừa lọc nhầm trường email vừa dùng $lte (nhỏ hơn hoặc bằng), ngược chiều yêu cầu. "

Lời giải
db.email.find({
  userIndex:{
    $lte:24
  }
}

, {email:1, _id:0})" đúng trường và đúng phép chiếu nhưng $lte lấy các chỉ số từ 24 trở xuống, trái với điều kiện lớn hơn 24.

Mở trang câu hỏi này →
AProject, Ship, Reduce
BProject, Decompose, Send
CIndex, Join, Display
DQuery, Join, Display
Lời giải
Đáp án đúng: "Project, Ship, Reduce". Semi-join (nửa phép nối) là kỹ thuật giảm lượng dữ liệu truyền qua mạng khi nối hai quan hệ R và S nằm ở hai trạm khác nhau của cơ sở dữ liệu phân tán. Bước Project chiếu R lên các thuộc tính nối để có tập giá trị khoá gọn nhẹ; bước Ship gửi tập giá trị này sang trạm chứa S; bước Reduce dùng nó để lọc S, chỉ giữ các bộ có giá trị khớp, rồi chỉ phần S đã thu gọn mới phải gửi đi để hoàn tất phép nối. "Project, Decompose, Send" có bước phân rã (decompose) không thuộc semi-join, vốn không tách quan hệ ra. "Index, Join, Display" mô tả quy trình truy vấn chung là lập chỉ mục, nối rồi hiển thị, không có bước gửi giá trị nối sang trạm khác. "Query, Join, Display" chỉ là trình tự chạy một truy vấn, bỏ qua đúng bước gửi và thu gọn làm nên semi-join.
Mở trang câu hỏi này →
A394383.53786
B45373.454788
C243767.4564
D60928.635220
Lời giải
Đáp án đúng: "60928.635220". Câu dẫn không kèm bảng số liệu; con số đến từ tập dữ liệu điều tra dân số Hoa Kỳ năm 2010 dùng trong bài thực hành, nơi mỗi dòng là một hạt (county) với cột tên bang và cột dân số. Cách tính là lọc các dòng thuộc bang Georgia rồi lấy trung bình cột dân số. Georgia có 159 hạt với tổng khoảng 9.687.653 người, nên trung bình là 9.687.653 chia 159: 159 nhân 60.928 được 9.687.552, còn dư 101, và 101 chia 159 xấp xỉ 0,635220, ra 60.928,635220. "394383.53786" nhân 159 hạt sẽ ra khoảng 62,7 triệu người, gấp hơn sáu lần dân số Georgia. "45373.454788" nhân 159 chỉ được khoảng 7,2 triệu người, thấp hơn tổng thực tế gần 2,5 triệu. "243767.4564" nhân 159 ra khoảng 38,8 triệu người, quá xa so với dân số khoảng 9,7 triệu của bang này.
Mở trang câu hỏi này →
AThe language specifies what data to obtain.
BThe language specifies both the process of how to obtain the data and specifies what data to obtain.
CThe language specifies the process of how to obtain the data.
DA language-specific declaration of data types to define the method of data retrieval.
Lời giải
Đáp án đúng: "The language specifies what data to obtain.". Ngôn ngữ truy vấn khai báo (declarative) như SQL hay Cypher chỉ yêu cầu người dùng mô tả kết quả muốn có, tức là lấy dữ liệu gì và thỏa điều kiện nào; còn cách thực hiện như chọn chỉ mục, thứ tự join, chiến lược duyệt là việc của bộ tối ưu truy vấn. Phương án "specifies both the process of how to obtain the data and specifies what data" sai vì một khi phải chỉ rõ cả quy trình thì ngôn ngữ không còn thuần khai báo. "The language specifies the process of how to obtain the data." mô tả ngôn ngữ thủ tục (procedural) như viết vòng lặp duyệt bản ghi trong Java hay chuỗi map, reduce viết tay, ngược với khai báo. Phương án "A language-specific declaration of data types to define the method of data retrieval." nhầm chữ khai báo theo nghĩa khai báo kiểu dữ liệu trong lập trình, không liên quan tới tính khai báo của truy vấn.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

3 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.