@@ -557,3 +557,81 @@ def test_top_level_listing(self, kikimr, s3, client, runtime_listing, unique_pre
557
557
assert result_set .rows [5 ].items [1 ].int32_value == 15
558
558
assert result_set .rows [5 ].items [2 ].int32_value == 33
559
559
assert sum (kikimr .control_plane .get_metering (1 )) == 10
560
+
561
+ @yq_all
562
+ @pytest .mark .parametrize ("client" , [{"folder_id" : "my_folder" }], indirect = True )
563
+ @pytest .mark .parametrize ("runtime_listing" , ["false" , "true" ])
564
+ @pytest .mark .parametrize ("kikimr_params" , [{"allow_concurrent_listings" : True }], indirect = True )
565
+ def test_top_level_listing_2 (self , kikimr , s3 , client , runtime_listing , unique_prefix ):
566
+ resource = boto3 .resource (
567
+ "s3" , endpoint_url = s3 .s3_url , aws_access_key_id = "key" , aws_secret_access_key = "secret_key"
568
+ )
569
+
570
+ bucket = resource .Bucket ("fbucket" )
571
+ bucket .create (ACL = 'public-read' )
572
+ bucket .objects .all ().delete ()
573
+
574
+ s3_client = boto3 .client (
575
+ "s3" , endpoint_url = s3 .s3_url , aws_access_key_id = "key" , aws_secret_access_key = "secret_key"
576
+ )
577
+
578
+ fruits = '''Fruit,Price,Weight
579
+ Banana,3,100
580
+ Apple,2,22
581
+ Pear,15,33'''
582
+ s3_client .put_object (Body = fruits , Bucket = 'fbucket' , Key = '2024-08-09.csv' , ContentType = 'text/plain' )
583
+ s3_client .put_object (Body = fruits , Bucket = 'fbucket' , Key = '2024-09-08.csv' , ContentType = 'text/plain' )
584
+ s3_client .put_object (Body = fruits , Bucket = 'fbucket' , Key = '2024-08-08.csv' , ContentType = 'text/plain' )
585
+ s3_client .put_object (Body = fruits , Bucket = 'fbucket' , Key = '/a/2024-08-08.csv' , ContentType = 'text/plain' )
586
+ s3_client .put_object (Body = fruits , Bucket = 'fbucket' , Key = '/b/test.csv' , ContentType = 'text/plain' )
587
+
588
+ kikimr .control_plane .wait_bootstrap (1 )
589
+ storage_connection_name = unique_prefix + "test_top_level_listing_2"
590
+ client .create_storage_connection (storage_connection_name , "fbucket" )
591
+
592
+ sql = f'''
593
+ pragma s3.UseRuntimeListing="{ runtime_listing } ";
594
+
595
+ SELECT *
596
+ FROM `{ storage_connection_name } `.`/2024-08-*`
597
+ WITH (format=csv_with_names, SCHEMA (
598
+ Fruit String NOT NULL,
599
+ Price Int NOT NULL,
600
+ Weight Int NOT NULL
601
+ )
602
+ );
603
+ '''
604
+
605
+ query_id = client .create_query ("simple" , sql , type = fq .QueryContent .QueryType .ANALYTICS ).result .query_id
606
+ client .wait_query_status (query_id , fq .QueryMeta .COMPLETED )
607
+
608
+ data = client .get_result_data (query_id )
609
+ result_set = data .result .result_set
610
+ logging .debug (str (result_set ))
611
+ assert len (result_set .columns ) == 3
612
+ assert result_set .columns [0 ].name == "Fruit"
613
+ assert result_set .columns [0 ].type .type_id == ydb .Type .STRING
614
+ assert result_set .columns [1 ].name == "Price"
615
+ assert result_set .columns [1 ].type .type_id == ydb .Type .INT32
616
+ assert result_set .columns [2 ].name == "Weight"
617
+ assert result_set .columns [2 ].type .type_id == ydb .Type .INT32
618
+ assert len (result_set .rows ) == 6
619
+ assert result_set .rows [0 ].items [0 ].bytes_value == b"Banana"
620
+ assert result_set .rows [0 ].items [1 ].int32_value == 3
621
+ assert result_set .rows [0 ].items [2 ].int32_value == 100
622
+ assert result_set .rows [1 ].items [0 ].bytes_value == b"Apple"
623
+ assert result_set .rows [1 ].items [1 ].int32_value == 2
624
+ assert result_set .rows [1 ].items [2 ].int32_value == 22
625
+ assert result_set .rows [2 ].items [0 ].bytes_value == b"Pear"
626
+ assert result_set .rows [2 ].items [1 ].int32_value == 15
627
+ assert result_set .rows [2 ].items [2 ].int32_value == 33
628
+ assert result_set .rows [3 ].items [0 ].bytes_value == b"Banana"
629
+ assert result_set .rows [3 ].items [1 ].int32_value == 3
630
+ assert result_set .rows [3 ].items [2 ].int32_value == 100
631
+ assert result_set .rows [4 ].items [0 ].bytes_value == b"Apple"
632
+ assert result_set .rows [4 ].items [1 ].int32_value == 2
633
+ assert result_set .rows [4 ].items [2 ].int32_value == 22
634
+ assert result_set .rows [5 ].items [0 ].bytes_value == b"Pear"
635
+ assert result_set .rows [5 ].items [1 ].int32_value == 15
636
+ assert result_set .rows [5 ].items [2 ].int32_value == 33
637
+ assert sum (kikimr .control_plane .get_metering (1 )) == 10
0 commit comments