Herunterladen großer Spalten aus der Datenbank über odbcIch habe eine SQL-Spalte, die varbinary (MAX) ist.Es scheint, dass die Spaltenbreite für JMP 65536 beträgt, daher kann ich nicht die gesamte Spalte herunterladen. Es scheint nicht nur ein ODBC-Problem zu sein.
Derzeit mache ich dies einzeln, indem ich einfach Teilstrings greife, bis sie alle leer sind, und sie zu einem Array verkette.
Das dauert EWIG.
Hat jemand Vorschläge für Möglichkeiten, dies zu optimieren?Ich versuche zu vermeiden, python/sqlcmd/etc. um die Blobs direkt zu greifen (um JMP zu vermeiden).
SkripterstellungBetreff: Herunterladen großer Spalten aus der Datenbank über odbcYep Yep.Sehr geschätzt.
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcNur eine Anmerkung, dass diese Einschränkung tut scheinen in JMP16.1 entfernt worden zu sein. Danke!
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcOpa, mein Übel.Wird besorgt. Danke.
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcHallo, @vince_faller .
Dieses Problem hätte in JMP 16.1 behoben werden sollen. Bitte senden Sie eine E-Mail an den Support, wenn Sie dies in 16.1 getestet haben und immer noch dasselbe Verhalten feststellen.
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcHallo nochmal @Dahlia_Watkins , gibt es Neuigkeiten, ob diese Feature-Anfrage Anklang gefunden hat?
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcDanke @Dahlia_Watkins
Weiß jemand im Internetland, ob es eine Möglichkeit gibt, die Größe der Transaktion zu erzwingen?
Meine aktuelle Implementierung ist schrecklich langsam (Abonnieren in Gruppen von 65536 und Zusammenfügen, bis der längste erledigt ist) und ich darf den Treiber nicht ändern; also ich stecke etwas in der Klemme.
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcPro bruan_boone Das Verhalten ist darauf zurückzuführen, dass diese Treiber die Spaltenlänge nicht neu einstellen. Anschließend legt JMP eine Standardlänge von fest 65536 wenn diese Daten nicht bereitgestellt werden.
Ich habe eine neue Funktionsanforderung hinzugefügt, um diesen Wert zu erhöhen, da JMP diese Daten verarbeiten kann.
In der Zwischenzeit scheint die Verwendung von SQL Server (nativ) zu funktionieren.
Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladenJa. Verwenden Sie genau dieselbe Verbindungszeichenfolge.Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladenAh, okay. Da ich also VARCHAR (MAX) verwende, gibt es vielleicht keine Spaltenlänge?
Leider funktioniert es auch mit dem Blockabruf nicht.
Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladen@vince_faller ,
Verwenden Sie denselben ODBC-Treiber für Python und JMP?
Stan
Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladenKönnen Sie versuchen, Folgendes zu verwenden:
Preferences( ODBC Disable Block Fetch( 1 ) );
Manchmal meldet der ODBC-Treiber die Länge der Spalte nicht.
SQL Server ist einer der Treiber, der den Blockabruf unterstützt (was viel effizienter ist als jeweils eine Zeile), aber wenn die Länge der Spalte nicht vom Treiber gemeldet wird, wird der Standardwert von 65536 verwendet.
Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladenDas geht über meine Fähigkeit zu testen, um zu verstehen, was passiert.
@briancorcoran ?
Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladen@Jeff_Perkinson
Wenn ich mir das genauer ansehe, kann ich mir dieses Verhalten nicht erklären.Ich kann Werte aus genau derselben Tabelle und Verbindungszeichenfolge über Python abrufen.Aus irgendeinem Grund blendet JMP die Spalte aus, sobald sie 65537 erreicht.
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
*/
Gibt es etwas, das ich vermisse?Oder vielleicht fügt Python darunter einige Funktionen hinzu.
*EDIT* Entschuldigung für so viele Änderungen.Ich hoffe, du bekommst nicht für jeden eine E-Mail.
Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladenSEHR relevant.Mein Fehler.Da passiert etwas Seltsames.
Danke @Jeff_Perkinson ,
Betreff: Datenbank mit großen Spalten von der Datenbank über odbc herunterladen
@vince_faller schrieb:
Es scheint, dass die Spaltenbreite für JMP 65536 beträgt, daher kann ich nicht die gesamte Spalte herunterladen.Es scheint nicht nur ein ODBC-Problem zu sein.
Ich habe keine unmittelbaren Gedanken zu Ihrer eigentlichen Anfrage, aber ich möchte die obige Aussage klarstellen. Die maximale Breite für eine Zeichenspalte in JMP ist VIEL größer als 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 ) ),
)
)
Ich bin mir sicher, dass dieses Detail für die Lösung Ihres Geschwindigkeits-/Abfrageproblems nicht relevant ist, und ich habe möglicherweise missverstanden, was Sie damit meinten Spaltenbreite .