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 das einzeln, indem ich einfach Teilzeichenfolgen ergreife, bis sie alle leer sind, und sie in einem Array zusammenfüge.
Das dauert EWIG.
Hat jemand Vorschläge, wie man das optimieren kann?Ich versuche die Verwendung von python/sqlcmd/etc zu vermeiden. um die Blobs direkt zu greifen (JMP vermeiden).
DatenzugriffBetreff: 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 scheint in JMP16.1 entfernt worden zu sein. Danke!
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcUpe, mein Fehler.Wird tun. 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 das gleiche Verhalten feststellen.
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcHallo nochmal @Dahlia_Watkins Gibt es Neuigkeiten, ob diese Funktionsanfrage Anklang gefunden hat?
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcDanke @Dahlia_Watkins
Weiß jemand im Internet, ob es eine Möglichkeit gibt, die Angabe der Größe aus der Transaktion zu erzwingen?
Meine aktuelle Implementierung ist schrecklich langsam (in Gruppen von 65536 abonnieren und zusammenfassen, bis die längste erledigt ist) und ich darf den Treiber nicht wechseln; Ich stecke also etwas in der Klemme.
Betreff: Herunterladen großer Spalten aus der Datenbank über odbcPro bryan_boone Das Verhalten ist darauf zurückzuführen, dass diese Treiber die Spaltenlänge nicht neu abstimmen. 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: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbcJa. Verwenden Sie genau dieselbe Verbindungszeichenfolge.Betreff: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbcAh, okay. Da ich also VARCHAR(MAX) verwende, gibt es vielleicht keine Spaltenlänge?
Leider funktioniert es nicht, selbst wenn der Blockabruf deaktiviert ist.
Betreff: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbc@vince_faller ,
Verwenden Sie denselben ODBC-Treiber für Python und JMP?
Stan
Betreff: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbcKönnen Sie versuchen, Folgendes zu verwenden:
Preferences( ODBC Disable Block Fetch( 1 ) );
Manchmal meldet der ODBC-Treiber nicht die Länge der Spalte.
SQL Server ist einer der Treiber, der den Blockabruf unterstützt (was wesentlich effizienter ist als jeweils ein zeilenweiser Abruf). Wenn die Länge der Spalte jedoch nicht vom Treiber gemeldet wird, wird der Standardwert 65536 verwendet.
Betreff: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbcDas übersteigt meine Fähigkeit, Tests durchzuführen, um zu verstehen, was passiert.
@briancorcoran ?
Betreff: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbc@Jeff_Perkinson
Wenn ich mir das genauer anschaue, kann ich dieses Verhalten nicht erklären.Ich kann über Python Werte aus genau derselben Tabelle und derselben Verbindungszeichenfolge 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 mir fehlt?Oder vielleicht fügt Python darunter einige Funktionen hinzu.
*EDIT* Entschuldigung für so viele Änderungen.Ich hoffe, Sie erhalten nicht für jeden eine E-Mail.
Betreff: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbcSEHR relevant.Mein Fehler.Dann passiert etwas Seltsames.
Danke @Jeff_Perkinson ,
Betreff: Herunterladen einer Datenbank mit großen Spalten aus der Datenbank über odbc
@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, möchte die obige Aussage jedoch klarstellen. Die maximale Breite einer 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 falsch verstanden, was Sie damit gemeint haben Spaltenbreite .