問題タブ [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.
java - Java 用の SQL クエリ パーサー
MySQL クエリ用の SQL クエリ パーサーを探しています。これを使用して、クエリを解析し、クエリ オブジェクトを変更し、変更されたクエリを出力できます
JSQLパーサーはまさに私が必要としていたものでしたが、列値内の一重引用符をエスケープする際に2つの主な問題があります https://github.com/JSQLParser/JSqlParser/issues/167 https://github.com/JSQLParser/JSqlParser/issues/166
だから私は、タスクに役立つオープンソースの代替手段を探しています
私が試した Presto-parser は Update クエリを解析できませんでした
他の誰かが信頼できる SQL 解析ライブラリを知っている場合は、私に知らせてください
java - Windows Server 2008 R2 での Java クラスの読み込みが遅い
SQL 解析には、Java Web アプリケーションでGeneral SQL Parser (GSP) を使用します。Java 7 を搭載した Windows Server 2008 R2 に GSP を使用してアプリケーションをデプロイすると、クラスのロード中に 100% の CPU ピークが発生し、数分間続く可能性があります。最初のクラスのロード後、アプリケーション サーバーをシャットダウンしてクラスがアンロードされるまで、すべてが正常に機能します。100% の CPU ピークが戻ってきます。同じコード ベースを Windows Server 2012、Windows 7 Enterprise、OS X、または Linux サーバーに展開すると、そのようなピークはありません。Windows Server 2008 R2 で Java 8 を使用すると、起動がわずかに改善されます。
Microsoft の Process Monitor では、この jar からクラスをロードする際に多くの時間が無駄になっていることがわかりました。gsp.jar 内のクラス ファイルは難読化されています。新しく追加された jar 以外の原因を除外できます。SQL ステートメントを解析するだけで、コールド スタートアップ時間が大幅に増加します。ウイルス対策を無効にしても効果はありません。新しい Windows Server バージョンへのアップグレードは、すべてのお客様にとってオプションではありません。
この GSP バージョンを実行しています。
このテスト プログラムは、Windows Server 2008 R2 で実行するのに 40 秒以上かかり、OS X では 1.5 秒かかりました。
この問題の原因と回避方法を知っている人はいますか?
編集 私は新しい Windows Server 2008 R2 を取り、異なる RAM/JVM 設定でテスト プログラムを実行しました。
例えば:java -Xmx1G -classpath ".\;.\gsp.jar" com.stackoverflow.TestGSP
OS XI で同じテストを実行すると、次の期間が得られます。
JVM のバージョンを変更すると問題は解決しますが、RAM を増やしても問題は解決しません。
postgresql - PostgreSQL 変換プロセス コード
SQL クエリを解析し、リレーショナル代数ツリーを形成する必要があります。現在、postgres 内部パーサーを使用してクエリを解析しています。(より具体的には、次のリンクのステップ 1 の結果を確認しました)。
http://www.postgresql.org/docs/current/static/parser-stage.html
私が探しているのは、ソース コードまたは 2 番目の部分である変換プロセスの実装です。少し探しましたが見つかりませんでした。
また、SQL クエリからリレーショナル代数ツリーを形成するためのその他の推奨事項はありますか?
ありがとう
perl - 複雑さのレベルを判断するための SQL の解析
SQL を構成する特定のキーワード、サブクエリ、派生テーブル、関数などの出現回数を数えることで、SQL の複雑さのレベル (単純/中/複雑など) を判断する必要があります。さらに、SQL を構文的に検証する必要があります。
ネットで検索したところ、Perl には名前が付けられた 2 つのクラスがSQL::Statement
あり、SQL::Parser
それらを利用して同じことを達成できることがわかりました。ただし、これらのクラスにはいくつかの制限があることがわかりました (CASE WHEN
コンストラクトがサポートされていないなど)。
そうは言っても、代わりに Lex/Yacc または Flex/Bison を使用してカスタムの簡潔な SQL パーサーを構築する方がよいでしょうか? どちらのアプローチがより優れていて迅速でしょうか?
これについてあなたの考えを共有してください。また、同じことについて議論しているオンラインのリソースを教えてください。
ありがとう
java - Javaで実際のデータベース接続なしでSQLを実行できますか?
Javaで実際のデータベース接続なしでSQLを実行できますか? 例:
Java コードの実行時に :param を置き換えます。これを行う方法はありますか?
このリンクを見つけました: Oracle SQL文字列を指定して選択した列を抽出するにはどうすればよいですか?
しかし、このリンクには簡単な解決策はありません
現在考えている: ダミーの hsqldb 接続と SQL クエリの実行。ただし、メモリ内の新しいデータベースにまたがる必要があります。
より良い&迅速な解決策はありますか?
python - テキストで以下のパターンを見つける
proc
より広い意味では、SQL プロシージャを解析し、依存するテーブルと列を見つける必要があります。そのために、私は検索しようとしていますregex
。
例:
返すべき
grep
またはawk
またはpythonスクリプトなどを使用してそれを行う方法は?
sql - SQL ステートメントが使用しているものを視覚化する
私は、別の一連のステートメントを介して構築されたいくつかのテーブルを使用するSQLステートメントを持っています。これらのテーブルは、それぞれがより多くのステートメントのセットなどによって構築され、約8度で約25のテーブルにファンアウトします(4度で広くなりますが、そのレベル最終的には、同じいくつかの一般的な情報源を指し始めます)。
私は、各ステートメントの選択された列と、それぞれがどのテーブルから来たかを示す Graphviz 用のドット ファイルの作成に取り組んでいます。ケースステートメントと関数が関係しているため、列ごとに複数のソースがある場合があります。それがいくつかのレベルになると、少し面倒になるだけでなく、正しく読み書きするのも難しくなります。
私は、SQL 選択ステートメントを分析し、(実行計画グラフを作成する代わりに) どのインがどのアウトに向かうかをグラフ化するツールがあるかどうかを探していました。できれば、ツールはこれをステートメントの複数のレイヤーと組み合わせることができます。
このようなツールを知っている人はいますか?
ご覧のとおり、Google で「SQL ステートメントのグラフ」などを検索すると、SQL クエリからのデータを使用してチャートやグラフを作成する方法、またはグラフ データベースに固有の方法に関する多くの結果が得られます。「グラフ」を「視覚化」に変更しても効果はありませんでした。
例えば
うまくいけば、ツールが次のようなものを作成するようになるかもしれません:
基本的に上記の SQL を解析し、(1 つのオプション) 次のように Graphviz 用の DOT ファイルを生成します。
テーブルを少し描画するために派手なレコード タイプのノード ラベルを使用できればさらに良いでしょう。
そして、Graphviz は SVG を生成できますが、StackOverflow は私が見ることができる方法でそれを埋め込むことができないようです。この SVG スニペットを実行して、それがどのように見えるかを確認してください (上記で埋め込まれた imgur が機能しない場合)。
python - Python は SQL を解析し、関係を見つけます
すべて文字列の SQL クエリの大きなリストがあります。それらはPresto用に作成されているため、MySQL 用にフォーマットされています。
いくつかのクエリで記述されたテーブルの関係を引き出すことができるようにしたいと考えています。
簡単なことから始めましょう。
エイリアスがありますが、物事がどこで結合されているかを明確に見ることができます-したがって、エイリアスもスキャンして見つける必要があります-キーワード「AS」が使用されているため、問題ありません。
したがって、クエリのリレーションシップのリストを返したいと思います。各リレーションシップは、次の dict のようになります。
それを行うのは非常に簡単だと想像できますが、物事はさらに複雑になります。
3つの注意点
- 「AS」予約語がありません - 取得が難しくなる可能性があります
- 結合するとき、2 つのテーブルを一緒に解析するために必要なものがたくさんあります。
- これは単純な「結合」ではなく、左結合です
4000 のクエリで関係を引き出すことができる、Python 用の何らかの形式の SQL 解析ライブラリがあるかどうか疑問に思っています。そうでない場合、どうすればこれを効率的に行うことができますか? クエリをスキャンし、結合を見つけ、エイリアスを見つけてから、破棄する必要がある一連のストップワードを考慮しながら、それらがどのように結合されているかを確認する必要があると思います。