odbc를 통해 데이터베이스에서 큰 열 다운로드varbinary(MAX)인 SQL 열이 있습니다.JMP의 컬럼 너비가 65536인 것 같아서 전체 컬럼을 다운로드할 수 없습니다. ODBC만의 문제는 아닌 것 같습니다.
현재 나는 하위 문자열이 모두 비워지고 배열로 연결될 때까지 하위 문자열을 잡아서 한 번에 하나씩 수행하고 있습니다.
이것은 영원히 걸립니다.
누구든지 이것을 최적화하는 방법에 대한 제안이 있습니까?나는 python/sqlcmd/etc를 사용하지 않으려 고 노력하고 있습니다. 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를 통해 데이터베이스에서 큰 열을 다운로드합니다.당 bryan_boone 동작은 이러한 드라이버가 열 길이를 반환하지 않기 때문입니다. 그 후 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는 블록 인출(한 번에 한 행보다 훨씬 효율적임)을 지원하는 드라이버 중 하나이지만 드라이버가 열 길이를 보고하지 않으면 기본값인 65536이 사용됩니다.
Re: odbc를 통해 데이터베이스에서 큰 열 데이터베이스를 다운로드합니다.이것은 무슨 일이 일어나고 있는지 이해하기 위해 테스트할 수 있는 능력을 넘어섭니다.
@briancorcoran ?
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
*/
내가 놓친 것이 있습니까?아니면 파이썬 아래에 일부 기능이 추가되었을 수도 있습니다.
*편집* 너무 많은 편집에 대해 죄송합니다.각각에 대해 이메일을 받지 않기를 바랍니다.
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 ) ),
)
)
이 세부 정보는 속도/쿼리 문제 해결과 관련이 없으며 귀하가 의미하는 바를 오해했을 수 있습니다. 열 너비 .