前の記事
最近の製品で使用したものSQLTools用VS Codeプラグイン。このプラグインはVS Code内のデータベース管理を可能にし、非常に多くのデータソースタイプをサポートします。
公式のデータソースタイプは、CockroachDB、MariaDB、My SQL、Postgre SQL、SQLite、Microsoft SQL Server/Azure、
多くのコミュニティデータソースがあります。管理に使用しているデータソースタイプはTrinoで、アイコンはウサギです。使用したコンポーネントは
Trino Driver
しかし、このプラグインを使用する場合、2つの問題があります。
問題は
问题1,Trino Driver不支持Https的link,来link Trinoデータソース最初はこの1つのだけで、后、また2つを発见しました。
問題2:テーブルレコードのプレビューがサポートされていない
問題3は,スキーマ切り替え時にテーブルレコードをプレビューできないこと
私の仕事はこの2つを解決することです
アセンブリ関連のコーミング
SQLToolsとTrino Driverのコンポーネントドキュメントを見てみると、後者が前者に依存していることがわかりました。
SQLToolsは、UIと基本的なドッキングインターフェイスを提供するプラットフォームとして機能します。Trino Driverは特別です。
Trinoデータソースはアダプターとして機能します。他のデータソースタイプのサポートも同様です。
Trino Driverは、このプラグインに基づいています。trino-clientこのプロジェクトで開発されたtrino-clientはtrinoのHTTPプロトコルに基づいている。
Axiosを使用してTrinoデータソースへの接続を実装し、SQL実行。
それが彼らの関係であり、
Trinoドライバを含むSQLTools
Trino-Clientを含むTrino-Client
trino-clientはaxiosとtrino HTTP APIを含む
デバッグ、問題解決
https接続データソースを実装するには、trino-clientライブラリがサポートしていないことも確認します。
デバッグ時には、trino-clientの最新バージョン(v 0.2.0)はサポートされていませんが、最新のmainブランチはサポートされています。(現在はv 0.2.1をリリースしている。HTTPSのサポート)
そこで、メインブランチに基づいてTrino Driverのライブラリを置き換えるライブラリを構築しました。HTTPSをサポートします。
ただし、Trino Driverはデータソースに接続するために追加のパラメータを必要とします。verifySSLCert: false
これで最初の問題は解決しました。この問題解決策は、本質的に証明書を検証しないことであり、HTTPSの真のサポートではない。
データソースへの真のHTTPS接続を実現するには、Trino Driverライブラリを再構築し、ファイルをアップロードするためのテーブルを追加し、axiosが証明書を使用する姿勢をデバッグする必要があります。
2つ目の問題は、Trinoデータソースを接続した後に発生します(プラグインの使用量が少ない問題は私が経験しており、非アクティブなコミュニティメンテナンスは信頼できません)。
2つ目の問題は、テーブルレコードの数をプレビューするときにOFF SETの問題を報告することです。これはSQLで書かれた問題と同じです。
複雑なコンポーネント、ネストされたプラグインの問題が発生し、最初にプラグインの問題を見つける必要があります。比較を通じて、他のデータソースプラグインはこの問題を持っていないことがわかり、Trinoデータソースにのみ表示されるので、問題はTrino Driverプラグインに表示されます。
仕方がない。
クレイジーなグローバル検索は、OFF SETを持つSQLコードを見つけました。自分の井戸の中のカエルのSQL知識で、問題を発見しました。
このライブラリに書かれているページングクエリSQLはこんな感じです。
SELECT *
FROM ${(p) => p.table.label || p.table}
LIMIT ${(p) => p.limit || 50}
OFFSET ${(p) => p.offset || 0};Baiduクエリの後、TrinoクエリSQL、OFFSETは通常LIMITの前に置かれ、最後のを削除します。;セミコロン。
変更後、再調整します。ハハハ...。それは可能です。
私がプラグインをビルドしてテストに送ったとき、2時間後に新しいバグが見つかったというフィードバックがありました。
私の最初の反応は、この問題が何であれ、崖は原作者によって書かれ、私のものではないということです。
最後の質問は
データソースをリンクすると、多くのスキーマがあるため、テーブルはスキーマの下に格納され、スキーマを切り替えてテーブルレコードを表示するとエラーが報告されます。
このような問題が発生し、プラグインをリリースするときに本当にテストする人がいますか?または計画は1つだけですか?
方法はありません、このようなニッチなデータソースとプラグインはほとんど注意を払う人がいません、使用しなければならない場合は、変更しようとすることができます、変更できない、著者と直接ラインに行きます。
この問題は、Trino DriverプラグインがSQL Toolsから引数を受け取った後、SQLクエリでスキーマパラメータを使用しないという結論に直接つながります。以下は著者が書いた2つのSQLです
SELECT *
FROM ${(p) => p.table.label || p.table}
OFFSET ${(p) => p.offset || 0}
LIMIT ${(p) => p.limit || 50}
SELECT count(1) AS total
FROM ${(p) => p.table.label || p.table};変更した。
SELECT *
FROM ${(p) => p.table.schema+'.'+p.table.label}
OFFSET ${(p) => p.offset || 0}
LIMIT ${(p) => p.limit || 50}
SELECT count(1) AS total
FROM ${(p) => p.table.schema+'.'+p.table.label}変更後、新しいプラグインを再構築し、新しいプラグインを使用してください。公式版を使用するには、著者を促し、私のPRをレビューする必要があります。
関連コードのPR:
https://github.com/regadas/sqltools-trino-driver/pulls?q=+author%3APmcFizz+
概要まとめ
重要なのはコードを何行書くかではなく、コードがもたらす価値、常に自分の価値を考えることです。
成長は川に架かる橋であり、山に架かる。
Leave a Reply