odbc 経由でデータベースから大きな列をダウンロードするvarbinary(MAX) の SQL 列があります。JMPの列幅は65536のようで、列全体をダウンロードすることはできません。 ODBC だけの問題ではないようです。
現在、私はこれらを一度に 1 つずつ実行しています。部分文字列がすべて空になるまで取得し、配列に連結するだけです。
これには永遠に時間がかかります。
これを最適化する方法について何か提案がある人はいますか?python/sqlcmd/などの使用を避けようとしています。 BLOB を直接取得します (JMP を回避します)。
データアクセスRe: odbc 経由でデータベースから大きな列をダウンロードするはいはい。とても有難い。
Re: odbc 経由でデータベースから大きな列をダウンロードするこの制限については注意してくださいするJMP16.1で削除されたようです。ありがとう!
Re: odbc 経由でデータベースから大きな列をダウンロードするああ、悪い。します。 ありがとう。
Re: odbc 経由でデータベースから大きな列をダウンロードするこんにちは、 @vince_faller 。
この問題は JMP 16.1 で解決されるべきでした。 16.1 でこれをテストしても同じ動作が発生する場合は、サポートに電子メールを送信してください。
Re: odbc 経由でデータベースから大きな列をダウンロードするやあまた会ったね@dahlia_watkins 、その機能リクエストが注目を集めた場合、何かニュースはありますか?
Re: odbc 経由でデータベースから大きな列をダウンロードするありがとう@dahlia_watkins
インターネットの世界にいる人は、トランザクションからサイズを強制的に指定する方法があるかどうか知っていますか?
現在の実装は非常に遅く (65536 個のグループでサブスクライブし、最も長いものが処理されるまで結合します)、ドライバーを変更することはできません。それで私は少し困っています。
Re: odbc 経由でデータベースから大きな列をダウンロードする当たりブライアン・ブーンこの動作は、これらのドライバーが列の長さを返さないことが原因です。 その後、JMP はデフォルトの長さを設定します。 65536このデータが提供されない場合。
JMP はこのデータを処理できるため、この値を増やすための新しい機能リクエストを追加しました。
当面は、SQL Server (ネイティブ) を使用すると機能するようです。
Re: odbc 経由でデータベースから大規模な列データベースをダウンロードするはい。 まったく同じ接続文字列を使用します。Re: odbc 経由でデータベースから大規模な列データベースをダウンロードするあ、そう。 VARCHAR(MAX) を使用しているので、列の長さはないのでしょうか?
残念ながら、ブロックフェッチをオフにしても機能しません。
Re: odbc 経由でデータベースから大規模な列データベースをダウンロードする@vince_faller 、
Python と JMP で同じ ODBC ドライバーを使用していますか?
スタン
Re: odbc 経由でデータベースから大規模な列データベースをダウンロードする使ってみていただけますか:
Preferences( ODBC Disable Block Fetch( 1 ) );
ODBC ドライバーが列の長さを報告しない場合があります。
SQL Server は、ブロック フェッチ (一度に 1 行ずつ取得するよりもはるかに効率的) をサポートするドライバーの 1 つですが、列の長さがドライバーによって報告されない場合は、既定値の 65536 が使用されます。
Re: odbc 経由でデータベースから大規模な列データベースをダウンロードするこれは、何が起こっているのかを理解するためにテストする私の能力を超えています。
@ブライアンコーコラン?
Re: odbc 経由でデータベースから大規模な列データベースをダウンロードする@ジェフ・パーキンソン
これを詳しく調べてみると、この動作を説明できません。Python を介して、まったく同じテーブルと接続文字列から値を取得できます。何らかの理由で、JMP は 65537 に達するとすぐに列を空白にします。
Names default to here(1);
driver = "ODBC Driver 17 for SQL Server"; // using SQL Server
server = "localhost";
database = "Test";
username = "sa";
password = "REDACTED";
cxn_string = "DRIVER="||driver||";SERVER="||server||";UID="||username||";PWD="||
password||";Database="||database;
cxn = create database connection(cxn_string);
executesql(cxn,
"
CREATE TABLE [dbo].[LargeChar](
[LargeCharID] [bigint] IDENTITY(1,1) NOT NULL,
[SomeBigChar] [varchar](MAX) NOT NULL,
CONSTRAINT [PK_Blob] PRIMARY KEY CLUSTERED
(
[LargeCharID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
"
);
executeSQL(cxn,
"INSERT INTO [LargeChar]
VALUES('"||REPEAT("A", 100000)||"')"
);
dt_download = executeSQL(cxn,
"SELECT SomeBigChar
, SubString(Convert(VARCHAR(MAX), SomeBigChar), 1, 65536) AS Char65536 -- this works
, SubString(Convert(VARCHAR(MAX), SomeBigChar), 1, 65537) AS Char65537 -- this doesn't
FROM [LargeChar]",
"This should work?"
);
show(length(dt_download:SomeBigChar[1]), // full text doesn't show
length(dt_download:Char65536[1]), // text that is only 65536 shows
length(dt_download:Char65537[1]) // text that is one higher? nope
);
//execute SQL(cxn, "DROP TABLE [LargeChar]");
close database connection(cxn);
//Python script returns
/*
0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
Name: SomeBigChar, dtype: object
0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
Name: Char65536, dtype: object
0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
Name: Char65537, dtype: object
*/
何か足りないものはありますか?あるいは、Python が機能を追加している可能性もあります。
*編集* 編集が多くて申し訳ありません。いちいちメールが届かないことを祈ります。
Re: odbc 経由でデータベースから大規模な列データベースをダウンロードする非常に関連性があります。悪いです。そのとき、何か奇妙なことが起こっています。
ありがとう@ジェフ・パーキンソン、
Re: odbc 経由でデータベースから大規模な列データベースをダウンロードする
@vince_faller書きました:
JMPの列幅は65536のようで、列全体をダウンロードすることはできません。ODBC だけの問題ではないようです。
あなたの実際の問い合わせについてすぐに考えたことはありませんが、上記の声明を明確にしたいと思います。 JMP の文字列の最大幅は 65536 よりもはるかに大きくなります。
New Table( "untitled 15",
Add Rows( 1 ),
New Column( "repeat",
Character,
"Nominal",
Formula( Repeat( "a", 128000000 ) ),
),
New Column( "length",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Length( :repeat ) ),
)
)
この詳細は速度/クエリの問題の解決には関係がないと確信しており、私があなたの意味を誤解している可能性があります。列幅。