Bạn có muốn lặp đi lặp lại các hoạt động thường ngày không? Vì vậy, tôi không. Nhưng mỗi lần làm việc với bộ lưu trữ Rostelecom trong máy khách SQL, tôi phải đăng ký tất cả các kết nối giữa các bảng theo cách thủ công. Và điều này bất chấp thực tế là trong 90% trường hợp, các trường và điều kiện để nối các bảng trùng khớp giữa các truy vấn! Có vẻ như bất kỳ máy khách SQL nào cũng có chức năng tự động hoàn thành, nhưng đối với các kho lưu trữ, nó không phải lúc nào cũng hoạt động: chúng hiếm khi bao gồm ràng buộc duy nhất và khóa ngoại để cải thiện hiệu suất và nếu không có chức năng này, chương trình sẽ không biết các thực thể có liên quan với nhau như thế nào khác và những gì nó có thể làm cho bạn.
Sau khi trải qua sự từ chối, tức giận, mặc cả, trầm cảm và sắp chấp nhận, tôi quyết định - tại sao không thử tự mình thực hiện tính năng tự động điền bằng blackjack và thực hiện đúng cách? Tôi sử dụng ứng dụng khách dbeaver, được viết bằng java, nó có phiên bản cộng đồng nguồn mở. Một kế hoạch đơn giản đã trưởng thành:
- Tìm các lớp trong mã nguồn chịu trách nhiệm tự động hoàn thành
- Chuyển hướng chúng để làm việc với siêu dữ liệu bên ngoài và lấy thông tin về các phép nối từ đó
- ??
- LỢI NHUẬN
Tôi đã tìm ra điểm đầu tiên khá nhanh - tôi tìm thấy yêu cầu trong trình theo dõi lỗi để điều chỉnh tính năng tự động điền và trong phần liên quan
Để làm việc với json tôi quyết định sử dụng thư viện
Cuối cùng, tôi đã cố gắng sửa các lỗi xây dựng: Tôi đã đăng ký thư viện không phải trong pom.xml mà trong tệp kê khaiManifest.mf, theo yêu cầu của OSGI, đồng thời chỉ định nó là gói nhập. Không phải là giải pháp đẹp nhất, nhưng nó hoạt động. Thế rồi bất ngờ tiếp theo xuất hiện. Nếu bạn đang phát triển trong Intellij Idea, bạn không thể bắt đầu gỡ lỗi dự án của mình dựa trên nền tảng nhật thực: một nhà phát triển thiếu kinh nghiệm sẽ phải chịu đựng không kém một nhà phân tích nếu không hoàn thành truy vấn. Chính các nhà phát triển hải ly đã đến giải cứu, chỉ ra trong wiki tất cả các điệu nhảy với tambourine cần phải thực hiện. Điều khó chịu nhất là ngay cả sau tất cả những lần squat này, dự án vẫn không muốn được khởi chạy ở chế độ gỡ lỗi với thư viện json được kết nối qua import-package (mặc dù thực tế là nó vẫn được lắp ráp thành công thành sản phẩm hoàn chỉnh).
Vào thời điểm đó, tôi đã nhận ra sự bất tiện khi sử dụng json cho nhiệm vụ của mình - xét cho cùng, siêu dữ liệu lẽ ra phải được chỉnh sửa thủ công và định dạng xml phù hợp hơn cho việc này. Đối số thứ hai ủng hộ xml là sự hiện diện của tất cả các lớp cần thiết trong JDK, điều này giúp bạn có thể ngừng đấu tranh với thư viện bên ngoài. Tôi rất vui mừng khi chuyển tất cả siêu dữ liệu từ json sang xml và bắt đầu chỉnh sửa logic tự động hoàn thành.
Ví dụ về siêu dữ liệu
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tableRelations>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_partner</rightTable>
<joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
</tableRelation>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_branch</rightTable>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
<joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/>
</tableRelation>
</tableRelations>
Kết quả là tôi
Khi các thay đổi được thực hiện đối với mã, câu hỏi đặt ra - ai sẽ điền siêu dữ liệu vào tệp? Có rất nhiều thực thể trong kho lưu trữ, việc tự mình đăng ký tất cả các kết nối sẽ rất tốn kém. Do đó, tôi quyết định giao nhiệm vụ này cho các nhà phân tích đồng nghiệp của mình. Tôi đã đăng tệp siêu dữ liệu trong svn, từ đó việc kiểm tra được thực hiện vào thư mục cục bộ của chương trình. Nguyên tắc là thế này: thực thể mới có xuất hiện trong kho không? Một nhà phân tích nhập các kết nối có thể có vào tệp, cam kết các thay đổi, những người còn lại tự kiểm tra và tận hưởng quá trình tự động hoàn thành: cộng đồng, tích lũy kiến thức và tất cả những thứ đó. Tiến hành hội thảo về cách sử dụng chương trình cho đồng nghiệp, viết một bài trên Confluence - giờ đây công ty đã có thêm một công cụ tiện lợi hơn.
Làm việc trên tính năng này giúp tôi hiểu rằng không cần phải ngại mày mò các dự án nguồn mở - theo quy luật, chúng có kiến trúc rõ ràng và ngay cả kiến thức cơ bản về ngôn ngữ cũng đủ để thử nghiệm. Và với một mức độ kiên trì nhất định, bạn thậm chí sẽ có thể thoát khỏi những hoạt động thường ngày đáng ghét, tiết kiệm thời gian cho những thử nghiệm mới.
Nguồn: www.habr.com