Cảnh báo: Các trình kết nối tham chiếu của Cloud Search được cung cấp "nguyên trạng" dưới dạng mã mẫu để tạo các trình kết nối hoạt động của riêng bạn. Mã mẫu này yêu cầu bạn phải tuỳ chỉnh và kiểm thử đáng kể trước khi sử dụng trong môi trường thực tế hoặc môi trường thực tế. Để sử dụng trong hoạt động sản xuất, bạn nên yêu cầu sự trợ giúp của một trong các đối tác Cloud Search của chúng tôi. Để được trợ giúp thêm về cách tìm một đối tác phù hợp trên Cloud Search, hãy liên hệ với Người quản lý tài khoản của Google. |
Bạn có thể thiết lập Google Cloud Search để khám phá và lập chỉ mục dữ liệu từ các cơ sở dữ liệu của tổ chức mình bằng cách sử dụng trình kết nối cơ sở dữ liệu của Google Cloud Search.
Điểm quan trọng cần lưu ý
Bạn có thể cài đặt và chạy trình kết nối cơ sở dữ liệu Cloud Search trong hầu hết mọi môi trường mà ứng dụng Java có thể chạy, miễn là trình kết nối có quyền truy cập vào cả Internet và cơ sở dữ liệu.
Yêu cầu hệ thống
Yêu cầu hệ thống | |
---|---|
Hệ điều hành | Windows hoặc Linux |
Cơ sở dữ liệu SQL | Mọi cơ sở dữ liệu SQL có trình điều khiển tuân thủ JDBC 4.0 trở lên, bao gồm:
|
Phần mềm | Trình điều khiển JDBC để trình kết nối dùng để truy cập cơ sở dữ liệu (được tải xuống và cài đặt riêng) |
Triển khai trình kết nối
Các bước sau đây mô tả cách cài đặt và định cấu hình trình kết nối để lập chỉ mục cơ sở dữ liệu được chỉ định và trả về kết quả cho người dùng Cloud Search.
Điều kiện tiên quyết
Trước khi bạn triển khai trình kết nối cơ sở dữ liệu Cloud Search, hãy thu thập những thông tin sau:
- Khoá riêng tư của Google Workspace, cũng chứa mã tài khoản dịch vụ. Để tìm hiểu cách lấy khoá riêng tư, hãy chuyển đến phần Định cấu hình quyền truy cập vào API REST của Google Cloud Search.
- Mã nguồn dữ liệu trên Google Workspace. Để tìm hiểu cách lấy mã nguồn dữ liệu, hãy chuyển đến phần Thêm nguồn dữ liệu để tìm kiếm.
Bước 1. Tải xuống và xây dựng phần mềm trình kết nối cơ sở dữ liệu
- Sao chép kho lưu trữ trình kết nối từ GitHub.
$ git clone https://github.com/google-cloudsearch/database-connector.git $ cd database-connector
- Kiểm tra phiên bản trình kết nối mong muốn:
$ git checkout tags/v1-0.0.3
- Tạo trình kết nối.
$ mvn package
Để bỏ qua các bài kiểm thử khi tạo trình kết nối, hãy sử dụngmvn package -DskipTests
. - Sao chép tệp zip của trình kết nối vào thư mục cài đặt trên máy rồi giải nén:
$ cp target/google-cloudsearch-database-connector-v1-0.0.3.zip installation-dir $ cd installation-dir $ unzip google-cloudsearch-database-connector-v1-0.0.3.zip $ cd google-cloudsearch-database-connector-v1-0.0.3
Bước 2. Định cấu hình trình kết nối cơ sở dữ liệu
- Tạo một tệp văn bản rồi đặt tên tệp đó là
connector-config.properties
(mặc định) hoặc tương tự. Bạn nên đặt tên cho các tệp cấu hình bằng đuôi.properties
hoặc.config
và để tệp trong cùng thư mục với trình kết nối. Nếu sử dụng tên hoặc đường dẫn khác, bạn phải chỉ định đường dẫn khi chạy trình kết nối. - Thêm thông số dưới dạng cặp khoá/giá trị vào nội dung tệp. Tệp cấu hình phải chỉ định các tham số truy cập nguồn dữ liệu, truy cập cơ sở dữ liệu, câu lệnh SQL truyền tải đầy đủ cơ sở dữ liệu, tiêu đề trường nội dung và định nghĩa cột. Bạn cũng có thể định cấu hình hành vi khác của trình kết nối bằng các tham số không bắt buộc. Ví dụ:
# Required parameters for data source access api.sourceId=1234567890abcdef api.identitySourceId=0987654321lmnopq api.serviceAccountPrivateKeyFile=./PrivateKey.json # # Required parameters for database access db.url=jdbc:mysql://localhost:3306/mysql_test db.user=root db.password=passw0rd # # Required full traversal SQL statement parameter db.allRecordsSql=select customer_id, first_name, last_name, phone, change_timestamp from address_book # # Required parameters for column definitions and URL format db.allColumns=customer_id, first_name, last_name, phone, change_timestamp db.uniqueKeyColumns=customer_id url.columns=customer_id # # Required content field parameter contentTemplate.db.title=customer_id # # Optional parameters to set ACLs to "entire domain" access defaultAcl.mode=fallback defaultAcl.public=true # # Optional parameters for schedule traversals schedule.traversalIntervalSecs=36000 schedule.performTraversalOnStart=true schedule.incrementalTraversalIntervalSecs=3600
Để biết nội dung mô tả chi tiết về các thông số dành riêng cho cơ sở dữ liệu, hãy xem Tài liệu tham khảo về thông số cấu hình ở cuối bài viết này.
Để tìm hiểu về các tham số phổ biến cho mọi trình kết nối Cloud Search, chẳng hạn như cấu hình siêu dữ liệu, định dạng ngày giờ và tuỳ chọn Danh sách kiểm soát quyền truy cập (ACL), hãy chuyển đến phần Tham số trình kết nối do Google cung cấp.
Nếu có thể, hãy chỉ định các thuộc tính của đối tượng giản đồ trong tham số truy vấn SQL truyền tải. Thông thường, bạn có thể thêm bí danh vào câu lệnh SQL. Ví dụ: nếu bạn có cơ sở dữ liệu phim và giản đồ nguồn dữ liệu chứa định nghĩa thuộc tính có tên là "ActorName", thì câu lệnh SQL có thể có dạng:
SELECT …, last_name AS ActorName, … FROM …
.
Bước 3. Chạy trình kết nối cơ sở dữ liệu
Ví dụ sau giả định các thành phần bắt buộc nằm trong thư mục cục bộ trên hệ thống Linux.
Để chạy trình kết nối qua dòng lệnh, hãy nhập lệnh sau:
java \ -cp "google-cloudsearch-database-connector-v1-0.0.3.jar:mysql-connector-java-5.1.41-bin.jar" \ com.google.enterprise.cloudsearch.database.DatabaseFullTraversalConnector \ [-Dconfig=mysql.config]
Trong trường hợp:
google-cloud-search-database-connector-v1-0.0.3.jar
là tệp .jar của trình kết nối cơ sở dữ liệumysql-connector-java-5.1.41-bin.jar
là trình điều khiển JDBC đang được dùng để truy cập vào cơ sở dữ liệumysql.config
là tệp cấu hình được đặt tên tuỳ chỉnh. Để đảm bảo trình kết nối nhận ra tệp cấu hình của bạn, hãy chỉ định đường dẫn của tệp trên dòng lệnh. Nếu không, trình kết nối sẽ sử dụngconnector-config.properties
trong thư mục cục bộ làm tên tệp mặc định.
Trình kết nối báo cáo lỗi cấu hình khi phát hiện thấy lỗi. Một số lỗi được báo cáo khi trình kết nối khởi chạy, chẳng hạn như khi cột cơ sở dữ liệu được xác định là một phần của nội dung bản ghi (trong db.allColumns
), nhưng cột này không được dùng trong truy vấn SQL truyền tải của cơ sở dữ liệu (trong db.allRecordsSql
). Các lỗi khác chỉ được phát hiện và báo cáo khi trình kết nối cố gắng truy cập cơ sở dữ liệu trong lần truyền tải đầu tiên, chẳng hạn như cú pháp SQL không hợp lệ.
Tài liệu tham khảo về thông số cấu hình
Thông số truy cập vào nguồn dữ liệu
Xem xét | Thông số |
---|---|
Mã nguồn dữ liệu | api.sourceId = source-ID
Bắt buộc. Mã nguồn trên Cloud Search mà quản trị viên Google Workspace đã thiết lập. |
Mã nguồn nhận dạng | api.identitySourceId = identity-source-ID
Bắt buộc sử dụng người dùng và nhóm bên ngoài cho các ACL. Mã nhận dạng nguồn nhận dạng trên Cloud Search mà quản trị viên Google Workspace đã thiết lập. |
Tài khoản dịch vụ | api.serviceAccountPrivateKeyFile = path-to-private-key
Bắt buộc. Đường dẫn đến tệp khoá tài khoản dịch vụ Cloud Search mà quản trị viên Google Workspace đã tạo. |
Các tham số truy cập cơ sở dữ liệu
Xem xét | Thông số |
---|---|
URL cơ sở dữ liệu | db.url = database-URL
Bắt buộc. Đường dẫn đầy đủ của cơ sở dữ liệu cần truy cập, chẳng hạn như |
Tên người dùng và mật khẩu cơ sở dữ liệu | db.user = username db.password = password
Bắt buộc. Tên người dùng và mật khẩu hợp lệ mà trình kết nối sử dụng để truy cập cơ sở dữ liệu. Người dùng cơ sở dữ liệu này phải có quyền đọc đối với các bản ghi liên quan của cơ sở dữ liệu đang được đọc. |
Trình điều khiển JDBC | db.driverClass = oracle.jdbc.OracleDriver
Chỉ bắt buộc nếu trình điều khiển JDBC 4.0 chưa được chỉ định trong đường dẫn lớp. |
Tham số truy vấn SQL truyền tải
Trình kết nối truyền tải các bản ghi cơ sở dữ liệu bằng các truy vấn SELECT của SQL trong tệp cấu hình. Bạn phải định cấu hình một truy vấn truyền tải đầy đủ; các truy vấn cho việc truyền tải tăng dần là không bắt buộc.
Truyền tải đầy đủ đọc mọi bản ghi cơ sở dữ liệu được định cấu hình để lập chỉ mục. Bạn cần phải truyền tải toàn bộ để lập chỉ mục các bản ghi mới cho Cloud Search và cũng để lập chỉ mục lại tất cả các bản ghi hiện có.
Phương thức Truyền tải tăng dần đọc và lập chỉ mục lại các bản ghi cơ sở dữ liệu mới được sửa đổi và các mục nhập gần đây vào cơ sở dữ liệu. Truyền tải tăng dần có thể hiệu quả hơn truyền tải toàn bộ. Để sử dụng truyền tải tăng dần, cơ sở dữ liệu của bạn phải chứa các trường dấu thời gian để cho biết các bản ghi đã được sửa đổi.
Trình kết nối thực thi những hoạt động truyền tải này theo lịch biểu mà bạn xác định trong thông số lịch biểu truyền tải.
Xem xét | Thông số |
---|---|
Truy vấn truyền tải đầy đủ | db.allRecordsSql = SELECT column-1[, column-2,...] FROM database-name
Bắt buộc. Truy vấn sẽ chạy cho mỗi lần truyền tải toàn bộ. Mọi tên cột mà trình kết nối sẽ sử dụng trong bất kỳ dung lượng nào (nội dung, ID duy nhất, ACL) đều phải có trong truy vấn này. Trình kết nối thực hiện một số quy trình xác minh sơ bộ khi khởi động để phát hiện lỗi và thiếu sót. Vì lý do này, bạn không nên sử dụng cụm từ tìm kiếm "CHỌN * TỪ ..." chung. |
Phân trang truyền tải đầy đủ | db.allRecordsSql.pagination = {none | offset}
Giá trị có thể là:
|
Truy vấn truyền tải tăng dần | db.incrementalUpdateSql = SELECT column-1[, column-2,...] FROM database-name WHERE last_update_time > ?
Bắt buộc nếu bạn lên lịch truyền tải dần. Dấu "?" trong truy vấn là phần giữ chỗ bắt buộc cho giá trị dấu thời gian. Trình kết nối sử dụng dấu thời gian để theo dõi nội dung sửa đổi giữa các truy vấn SQL truyền tải tăng dần. Để theo dõi cột dấu thời gian của cơ sở dữ liệu cho lần cập nhật gần đây nhất, hãy thêm bí danh Đối với truyền tải tăng dần đầu tiên, trình kết nối sử dụng thời gian bắt đầu của trình kết nối. Sau lần truyền tải tăng dần đầu tiên, Cloud Search sẽ lưu trữ dấu thời gian để trình kết nối khởi động lại có thể truy cập dấu thời gian truyền tải tăng dần trước đó. |
Múi giờ của cơ sở dữ liệu | db.timestamp.timezone = America/Los_Angeles
Chỉ định múi giờ để sử dụng cho dấu thời gian của cơ sở dữ liệu. Dấu thời gian của cơ sở dữ liệu dùng để xác định các bản ghi mới được bổ sung hoặc bản ghi cơ sở dữ liệu mới được sửa đổi. Theo mặc định, múi giờ địa phương nơi trình kết nối đang chạy. |
Ví dụ về truy vấn SQL truyền tải
- Truy vấn truyền tải đầy đủ cơ bản để đọc mọi bản ghi quan tâm trong cơ sở dữ liệu của nhân viên để lập chỉ mục:
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \ FROM employee
- Chỉ định phân trang theo độ lệch và chia toàn bộ quá trình truyền tải thành nhiều truy vấn.
Đối với SQL Server 2012 hoặc Oracle 12c (cú pháp SQL 2008 chuẩn):
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \ FROM employee \ ORDER BY customer_id OFFSET ? ROWS FETCH FIRST 1000 ROWS ONLY db.allRecordsSql.pagination = offset
hoặc đối với MySQL hoặc Google Cloud SQL:
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \ FROM employee \ ORDER BY customer_id LIMIT 1000 OFFSET ? db.allRecordsSql.pagination = offset
- Truy vấn truyền tải đầy đủ áp dụng các ACL riêng lẻ với các bí danh:
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time, \ permitted_readers AS readers_users, \ denied_readers AS denied_users, \ permitted_groups AS readers_groups, \ denied_groups AS denied_groups \ FROM employee
- Truy vấn truyền tải tăng dần cơ bản:
db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time \ FROM employee \ WHERE last_update_time > ?
- Truy vấn truyền tải tăng dần áp dụng từng ACL riêng lẻ với các bí danh:
db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time, \ permitted_readers AS readers_users, \ denied_readers AS denied_users, \ permitted_groups AS readers_groups, \ denied_groups AS denied_groups \ FROM employee \ WHERE last_update_time > ?
- Truy vấn truyền tải tăng dần sử dụng dấu thời gian của cơ sở dữ liệu thay vì thời gian hiện tại:
db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, \ last_update_time AS timestamp_column \ FROM employee \ WHERE last_update_time > ?
Tham số định nghĩa cột
Các tham số sau đây chỉ định cột mà bạn sử dụng trong câu lệnh truyền tải và xác định riêng từng bản ghi.
Xem xét | Thông số |
---|---|
Tất cả các cột | db.allColumns = column-1, column-2, ...column-N
Bắt buộc. Xác định mọi cột bắt buộc trong một truy vấn SQL khi truy cập vào cơ sở dữ liệu. Các cột được xác định bằng tham số này phải được tham chiếu rõ ràng trong các truy vấn. Mọi thông số định nghĩa cột khác sẽ được so sánh với tập hợp cột này. Ví dụ: db.allColumns = customer_id, first_name, last_name, phone, change_timestamp |
Cột khoá duy nhất | db.uniqueKeyColumns = column-1[, column-2]
Bắt buộc. Liệt kê một cột cơ sở dữ liệu chứa giá trị duy nhất hoặc bằng một tổ hợp các cột mà giá trị của các cột đó cùng xác định một mã nhận dạng duy nhất. Cloud Search yêu cầu mỗi tài liệu có thể tìm kiếm phải có một giá trị nhận dạng duy nhất trong một nguồn dữ liệu. Bạn phải xác định được một mã nhận dạng duy nhất cho mỗi bản ghi cơ sở dữ liệu từ các giá trị trong cột. Nếu bạn chạy nhiều trình kết nối trên các cơ sở dữ liệu riêng biệt nhưng lập chỉ mục vào một tập dữ liệu chung, hãy đảm bảo rằng bạn chỉ định một mã nhận dạng duy nhất trên tất cả tài liệu. Ví dụ: db.uniqueKeyColumns = customer_id # or db.uniqueKeyColumns = last_name, first_name |
Cột liên kết URL | url.columns = column-1[, column-2]
Bắt buộc. Chỉ định ít nhất một tên đã xác định và hợp lệ của các cột dùng cho URL dùng cho kết quả tìm kiếm có thể nhấp. Đối với các cơ sở dữ liệu không có URL liên kết với từng bản ghi cơ sở dữ liệu, bạn có thể dùng một đường liên kết tĩnh cho mọi bản ghi. Tuy nhiên, nếu giá trị cột xác định một đường liên kết hợp lệ cho mỗi bản ghi, thì bạn phải chỉ định cột URL xem và giá trị cấu hình định dạng. |
Định dạng URL | url.format = https://www.example.com/{0}
Xác định định dạng của URL chế độ xem. Tham số được đánh số là các cột được chỉ định theo thứ tự trong db.columns, bắt đầu bằng số 0. Nếu không được chỉ định, giá trị mặc định sẽ là "{0}." Các ví dụ nằm trong bảng này. |
Cột được mã hóa phần trăm cho URL | url.columnsToEscape = column-1[, column-2]
Chỉ định các cột từ db.columns có giá trị sẽ được mã hoá theo phần trăm trước khi đưa các cột này vào chuỗi URL được định dạng. |
Ví dụ về cột URL
Để chỉ định các cột được dùng trong truy vấn truyền tải và định dạng của URL chế độ xem:
- Cách dùng một URL tĩnh không dùng giá trị bản ghi cơ sở dữ liệu:
url.format = https://www.example.com
- Cách sử dụng một giá trị cột duy nhất là URL chế độ xem:
url.format = {0} url.columns = customer_id
- Cách sử dụng một giá trị cột duy nhất được thay thế vào URL chế độ xem tại vị trí {0}:
url.format = https://www.example.com/customer/id={0} url.columns = customer_id url.columnsToEscape = customer_id
- Cách sử dụng nhiều giá trị cột nhằm tạo URL chế độ xem (các cột phụ thuộc vào thứ tự):
url.format = {1}/customer={0} url.columns = customer_id, linked_url url.columnsToEscape = customer_id
Trường nội dung
Sử dụng các lựa chọn nội dung để xác định những giá trị bản ghi cần được đưa vào nội dung có thể tìm kiếm.
Xem xét | Thông số |
---|---|
Cột tìm kiếm chất lượng cao nhất | contentTemplate.db.title = column-name
Bắt buộc. Cột chất lượng cao nhất cho việc lập chỉ mục tìm kiếm và mức độ ưu tiên kết quả. |
Ưu tiên cột cho tìm kiếm | contentTemplate.db.quality.high = column-1[, column-2...] contentTemplate.db.quality.medium = column-1[, column-2...] contentTemplate.db.quality.low = column-1[, column-2...]
Chỉ định các cột nội dung (ngoại trừ nhóm cột cho |
Cột dữ liệu nội dung | db.contentColumns = column-1[, column-2...]
Chỉ định cột nội dung trong cơ sở dữ liệu. Các tài liệu này được định dạng và tải lên Cloud Search dưới dạng nội dung tài liệu có thể tìm kiếm được. Nếu bạn không chỉ định một giá trị, giá trị mặc định sẽ là "*" cho biết rằng tất cả các cột phải được dùng cho nội dung. |
Cột Blob | db.blobColumn = column-name
Chỉ định tên của một cột blob duy nhất để sử dụng cho nội dung tài liệu thay vì kết hợp các cột nội dung. Nếu bạn chỉ định cột blob, thì cột này sẽ bị coi là lỗi nếu bạn cũng xác định các cột nội dung. Tuy nhiên, bạn vẫn được phép định nghĩa cột siêu dữ liệu và cột dữ liệu có cấu trúc cùng với các cột blob. |