scaricare colonne di grandi dimensioni dal database tramite odbcHo una colonna sql che è varbinary (MAX).Sembra che la larghezza della colonna per JMP sia 65536, quindi non posso scaricare l'intera colonna. Non sembra essere un problema solo ODBC.
Attualmente li sto facendo uno alla volta semplicemente afferrando le sottostringhe finché non sono tutte vuote e si concatenano in un array.
Questo richiede SEMPRE.
Qualcuno ha qualche suggerimento su come ottimizzare questo?Sto cercando di evitare di usare python/sqlcmd/etc. per afferrare direttamente i blob (evitando JMP).
ScriptingRe: scaricare colonne di grandi dimensioni dal database tramite odbcSi si.Molto apprezzato.
Re: scaricare colonne di grandi dimensioni dal database tramite odbcSolo una nota che questa limitazione fa sembrano essere stati rimossi in JMP16.1. Grazie!
Re: scaricare colonne di grandi dimensioni dal database tramite odbcOpe, colpa mia.Andrà bene. Grazie.
Re: scaricare colonne di grandi dimensioni dal database tramite odbcCiao, @vince_faller .
Questo problema avrebbe dovuto essere risolto in JMP 16.1. Invia un'e-mail all'assistenza se hai testato questo in 16.1 e vedi ancora lo stesso comportamento.
Re: scaricare colonne di grandi dimensioni dal database tramite odbcCiao di nuovo @Dahlia_Watkins , ci sono novità se quella richiesta di funzionalità ha avuto successo?
Re: scaricare colonne di grandi dimensioni dal database tramite odbcGrazie @Dahlia_Watkins
Qualcuno in terra di Internet sa se c'è un modo per forzare la dimensione da dare dalla transazione?
La mia attuale implementazione è incredibilmente lenta (sottoscrizione in gruppi di 65536 e concatenazione insieme fino a quando non è stata curata la più lunga) e non sono autorizzato a cambiare il driver; quindi sono un po' nei guai.
Re: scaricare colonne di grandi dimensioni dal database tramite odbcPer bryan_boone il comportamento è dovuto al fatto che questi driver non risintonizzano la lunghezza della colonna. Successivamente, JMP imposta una lunghezza predefinita di 65536 quando questi dati non vengono forniti.
Ho aggiunto una nuova richiesta di funzionalità per aumentare questo valore poiché JMP può gestire questi dati.
Nel frattempo, l'utilizzo di SQL Server (nativo) sembra funzionare.
Ri: download di database di colonne di grandi dimensioni dal database tramite odbcSì. Utilizzando la stessa identica stringa di connessione.Ri: download di database di colonne di grandi dimensioni dal database tramite odbcAh ok. quindi dato che sto usando VARCHAR(MAX), forse non c'è la lunghezza della colonna?
Sfortunatamente, anche con il recupero del blocco disattivato, non funziona.
Ri: download di database di colonne di grandi dimensioni dal database tramite odbc@vince_faller ,
Stai usando lo stesso driver ODBC per Python e JMP?
Stan
Ri: download di database di colonne di grandi dimensioni dal database tramite odbcPuoi provare ad usare:
Preferences( ODBC Disable Block Fetch( 1 ) );
A volte il driver ODBC non riporta la lunghezza della colonna.
SQL Server è uno dei driver che supporta il block fetch (che è molto più efficiente di una riga alla volta), ma se la lunghezza della colonna non viene segnalata dal driver, viene utilizzato il valore predefinito 65536.
Ri: download di database di colonne di grandi dimensioni dal database tramite odbcQuesto va oltre la mia capacità di testare per capire cosa sta succedendo.
@briancorcoran ?
Ri: download di database di colonne di grandi dimensioni dal database tramite odbc@Jeff_Perkinson
Esaminando di più in questo non riesco a spiegare questo comportamento.Sono in grado di ottenere valori dalla stessa identica tabella e stringa di connessione tramite Python.Per qualsiasi motivo, JMP cancella la colonna non appena raggiunge 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
*/
C'è qualcosa che mi manca?O forse sotto Python sta aggiungendo alcune funzionalità.
*EDIT* scusa per le tante modifiche.Spero che tu non riceva un'e-mail per ognuno.
Ri: download di database di colonne di grandi dimensioni dal database tramite odbcMOLTO pertinente.Colpa mia.Allora sta succedendo qualcosa di strano.
Grazie @Jeff_Perkinson ,
Ri: download di database di colonne di grandi dimensioni dal database tramite odbc
@vince_faller ha scritto:
Sembra che la larghezza della colonna per JMP sia 65536, quindi non posso scaricare l'intera colonna.Non sembra essere un problema solo ODBC.
Non ho pensieri immediati sulla tua richiesta attuale, ma voglio chiarire la dichiarazione di cui sopra. La larghezza massima per una colonna di caratteri in JMP è MOLTO maggiore di 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 ) ),
)
)
Sono sicuro che questo dettaglio non è rilevante per risolvere il tuo problema di velocità/query e potrei aver frainteso cosa intendevi per larghezza della colonna .