問題タブ [sql-parser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2000 参照

python - Python で完全な SQL クエリを解析する関数はありますか?

postgreSQL クエリを使用しています。たとえば、SQLクエリからすべての情報を抽出したい

関連するすべてのテーブル、すべての選択述語、およびすべての結合述語、グループごと、および部分ごとの順序を取得したい。

私は使用sqlparseして、関連するテーブルのみを取得する方法を見つけました。この情報を抽出する方法の例はありますか?

0 投票する
2 に答える
1797 参照

java - JSQL パーサーを使用してクエリからテーブル名を取得する方法は?

クエリを解析するコードを書き始めたのは、同じSQLクエリがAPIs利用できることを確認するためだけでした。JSQLParser herejarを見たとき、指定された依存関係を使用してダウンロードしました

SQL以下のように、クエリから列名を取得するコードを見つけました。

メインクラス:エントリー

パーサーを使用するクラス: 変数

以下の方法を使用してテーブルを取得しようとしました:私はこれを試しました

しかし、それはNULLを印刷しています。

私が使用しているクエリはPostgresql. メソッド: getColumns は列を正しく出力しています。渡されたクエリからテーブル名を出力する方法がわかりません。クエリからテーブル名を取得する特定の方法はありますか? JSQLParserを使用して特定のクエリからテーブル名を抽出する方法を教えてください。

0 投票する
1 に答える
1451 参照

google-bigquery - 標準 SQL (BigQuery) を解析して入力列と出力列を取得する方法

標準の SQL ステートメントを使用して大量のデータ マートを生成する BigQuery でデータ ウェアハウスを構築しています。これらは非常に大規模で複雑になる可能性があります。依存関係のチェーン全体でデータ系統を追跡するために、SQL ステートメントを自動的に解析し、入力 table.column(s) と一致するすべての出力列を取得したいと考えています。

簡単な例:

SELECT t1.a, t2.b, t1.a + t2.b AS c FROM table1 t1 JOIN table2 t2 ON t1.a = t2.a

最終的には次のようになります。

Input Output table1.a a table2.b b table1.a c table1.b c

https://www.npmjs.com/package/node-sql-parserを使用してみましたが、一部の複雑なシナリオでは不十分です。

SQL ステートメントを解析し、完全な標準 SQL 文法の AST を返すことをサポートする言語で利用可能なライブラリはありますか?

0 投票する
0 に答える
36 参照

python - SQL ステートメントを解析して、SELECT ステートメントの後に列を作成するために使用されている式を分離する

SQL ステートメントを解析しようとしています。その出力は、FROM 句を使用して取り込まれているテーブルの属性を使用して列を作成する式を提供するはずです。

例えば。

上記のステートメントを解析すると、次のような出力が得られます。


方式

SUM((col2/t2.col7 - col21))


問題は、数式に、さらに SELECT ステートメントを持つことができるサブクエリを含めることができることです。

どんな助けでも大歓迎です。

0 投票する
2 に答える
163 参照

python - SQL クエリ内で使用されるフィールドを取得する

特定の SQL クエリで使用されるすべてのフィールド (理想的にはテーブルの詳細を含む) のリストを返すことができるようにしたいと考えています。たとえば、クエリの入力:

戻るだろう

フィールド 3 がテーブル 2 ではなくテーブル 1 にあることをリーダーが知る方法がないため、実際には SQL カーネル (正しい言葉ですか? エンジン?) を使用する必要があります。このため、解決策はSQLになると思います。それも処理できればボーナスポイントSELECT *

sqlparse ( https://sqlparse.readthedocs.io/en/latest/ ) を使用して Python ソリューションを試みましたが、一時テーブル、サブクエリ、および CTE を含むより複雑な SQL クエリに問題がありました。また、エイリアスの処理も非常に困難でした (特にクエリが複数の場所で同じエイリアスを使用した場合)。明らかにfield3、テーブル識別子がない上記のようなケースを処理できませんでした。また、それを処理することもできませんSELECT *

私は、SQL Server Management Studio 内に、または SQL Server 自体内に何らかの機能を備えた、より洗練されたソリューションがあることを望んでいました。Redgate の SQL Prompt があります。これは、その IntelliSense 内で、フォーマットしているアーキテクチャと SQL クエリをある程度理解している必要があります。

更新: 要求どおり: 私がこれを実行しようとしている理由はUsers、組織内でどの SSRS レポートを実行できるかを判断するためです。これは、特定のレポートのすべてのデータセット (この場合は SQL クエリ) で使用されるすべてのフィールドにGRANT SELECT権限が割り当てられているかどうかに完全に依存しています。私はRolesすでに、彼らの. 私は今、それらの権限が実行を許可するレポートにそれを拡張したいと考えています。UsersGRANT SELECTRoles