@@ -347,15 +347,15 @@ def save_hyper_as_csv(hyper_file: str, file_path: str, **kwargs):
347347
348348 # Get column names
349349 column_names = ',' .join (f'"{ column } "' for column in columns )
350- sql = f"SELECT { column_names } FROM \" { schema } \" .\" { table } \" ORDER BY row_number"
351- offset = 0
352350
353351 if options .use_pantab :
354352 # Use pantab to stream hyper to csv
355353 logging .info ('Stream hyper to csv with pantab.' )
356354
357355 mode = 'w'
358356 header = True
357+ sql = f"SELECT { column_names } FROM \" { schema } \" .\" { table } \" ORDER BY row_number"
358+ offset = 0
359359
360360 while True :
361361 query = f"{ sql } LIMIT { options .chunk_size } OFFSET { offset } "
@@ -375,22 +375,30 @@ def save_hyper_as_csv(hyper_file: str, file_path: str, **kwargs):
375375 with HyperProcess (Telemetry .DO_NOT_SEND_USAGE_DATA_TO_TABLEAU , 'test' ) as hyper :
376376 with Connection (endpoint = hyper .endpoint , database = temp_hyper ) as connection :
377377
378+ # Get min and max value from row_number
379+ sql_range = f"SELECT MIN(row_number), MAX(row_number) FROM \" { schema } \" .\" { table } \" "
380+ value_range = connection .execute_query (sql_range )
381+ start_val , end_val = list (value_range )[0 ]
382+ logging .info (f"Get row_number range: [{ str (start_val )} , { str (end_val )} ]" )
383+
384+ sql = f"SELECT { column_names } FROM \" { schema } \" .\" { table } \" "
385+
378386 with open_func (file_path , mode , newline = '' , encoding = "utf-8" ) as f :
379387
380388 writer = csv .writer (f )
381389 # write header
382390 writer .writerow (columns )
383391
384- while True :
385- query = f"{ sql } LIMIT { options .chunk_size } OFFSET { offset } "
392+ while start_val <= end_val :
393+ chunk_end = min (start_val + options .chunk_size - 1 , end_val )
394+ query = f"{ sql } WHERE row_number BETWEEN { start_val } AND { chunk_end } "
395+ logging .info (f"Query between { start_val } and { chunk_end } " )
396+
386397 result = connection .execute_query (query )
387398
388399 rows = list (result )
389- if not rows :
390- break
391-
392400 writer .writerows (rows )
393- offset += options .chunk_size
401+ start_val += options .chunk_size
394402
395403
396404def save_dataframe_as_hyper (df , file_path , ** kwargs ):
0 commit comments