|
@@ -557,3 +557,81 @@ Pear,15,33'''
|
|
|
assert result_set.rows[5].items[1].int32_value == 15
|
|
|
assert result_set.rows[5].items[2].int32_value == 33
|
|
|
assert sum(kikimr.control_plane.get_metering(1)) == 10
|
|
|
+
|
|
|
+ @yq_all
|
|
|
+ @pytest.mark.parametrize("client", [{"folder_id": "my_folder"}], indirect=True)
|
|
|
+ @pytest.mark.parametrize("runtime_listing", ["false", "true"])
|
|
|
+ @pytest.mark.parametrize("kikimr_params", [{"allow_concurrent_listings": True}], indirect=True)
|
|
|
+ def test_top_level_listing_2(self, kikimr, s3, client, runtime_listing, unique_prefix):
|
|
|
+ resource = boto3.resource(
|
|
|
+ "s3", endpoint_url=s3.s3_url, aws_access_key_id="key", aws_secret_access_key="secret_key"
|
|
|
+ )
|
|
|
+
|
|
|
+ bucket = resource.Bucket("fbucket")
|
|
|
+ bucket.create(ACL='public-read')
|
|
|
+ bucket.objects.all().delete()
|
|
|
+
|
|
|
+ s3_client = boto3.client(
|
|
|
+ "s3", endpoint_url=s3.s3_url, aws_access_key_id="key", aws_secret_access_key="secret_key"
|
|
|
+ )
|
|
|
+
|
|
|
+ fruits = '''Fruit,Price,Weight
|
|
|
+Banana,3,100
|
|
|
+Apple,2,22
|
|
|
+Pear,15,33'''
|
|
|
+ s3_client.put_object(Body=fruits, Bucket='fbucket', Key='2024-08-09.csv', ContentType='text/plain')
|
|
|
+ s3_client.put_object(Body=fruits, Bucket='fbucket', Key='2024-09-08.csv', ContentType='text/plain')
|
|
|
+ s3_client.put_object(Body=fruits, Bucket='fbucket', Key='2024-08-08.csv', ContentType='text/plain')
|
|
|
+ s3_client.put_object(Body=fruits, Bucket='fbucket', Key='/a/2024-08-08.csv', ContentType='text/plain')
|
|
|
+ s3_client.put_object(Body=fruits, Bucket='fbucket', Key='/b/test.csv', ContentType='text/plain')
|
|
|
+
|
|
|
+ kikimr.control_plane.wait_bootstrap(1)
|
|
|
+ storage_connection_name = unique_prefix + "test_top_level_listing_2"
|
|
|
+ client.create_storage_connection(storage_connection_name, "fbucket")
|
|
|
+
|
|
|
+ sql = f'''
|
|
|
+ pragma s3.UseRuntimeListing="{runtime_listing}";
|
|
|
+
|
|
|
+ SELECT *
|
|
|
+ FROM `{storage_connection_name}`.`/2024-08-*`
|
|
|
+ WITH (format=csv_with_names, SCHEMA (
|
|
|
+ Fruit String NOT NULL,
|
|
|
+ Price Int NOT NULL,
|
|
|
+ Weight Int NOT NULL
|
|
|
+ )
|
|
|
+ );
|
|
|
+ '''
|
|
|
+
|
|
|
+ query_id = client.create_query("simple", sql, type=fq.QueryContent.QueryType.ANALYTICS).result.query_id
|
|
|
+ client.wait_query_status(query_id, fq.QueryMeta.COMPLETED)
|
|
|
+
|
|
|
+ data = client.get_result_data(query_id)
|
|
|
+ result_set = data.result.result_set
|
|
|
+ logging.debug(str(result_set))
|
|
|
+ assert len(result_set.columns) == 3
|
|
|
+ assert result_set.columns[0].name == "Fruit"
|
|
|
+ assert result_set.columns[0].type.type_id == ydb.Type.STRING
|
|
|
+ assert result_set.columns[1].name == "Price"
|
|
|
+ assert result_set.columns[1].type.type_id == ydb.Type.INT32
|
|
|
+ assert result_set.columns[2].name == "Weight"
|
|
|
+ assert result_set.columns[2].type.type_id == ydb.Type.INT32
|
|
|
+ assert len(result_set.rows) == 6
|
|
|
+ assert result_set.rows[0].items[0].bytes_value == b"Banana"
|
|
|
+ assert result_set.rows[0].items[1].int32_value == 3
|
|
|
+ assert result_set.rows[0].items[2].int32_value == 100
|
|
|
+ assert result_set.rows[1].items[0].bytes_value == b"Apple"
|
|
|
+ assert result_set.rows[1].items[1].int32_value == 2
|
|
|
+ assert result_set.rows[1].items[2].int32_value == 22
|
|
|
+ assert result_set.rows[2].items[0].bytes_value == b"Pear"
|
|
|
+ assert result_set.rows[2].items[1].int32_value == 15
|
|
|
+ assert result_set.rows[2].items[2].int32_value == 33
|
|
|
+ assert result_set.rows[3].items[0].bytes_value == b"Banana"
|
|
|
+ assert result_set.rows[3].items[1].int32_value == 3
|
|
|
+ assert result_set.rows[3].items[2].int32_value == 100
|
|
|
+ assert result_set.rows[4].items[0].bytes_value == b"Apple"
|
|
|
+ assert result_set.rows[4].items[1].int32_value == 2
|
|
|
+ assert result_set.rows[4].items[2].int32_value == 22
|
|
|
+ assert result_set.rows[5].items[0].bytes_value == b"Pear"
|
|
|
+ assert result_set.rows[5].items[1].int32_value == 15
|
|
|
+ assert result_set.rows[5].items[2].int32_value == 33
|
|
|
+ assert sum(kikimr.control_plane.get_metering(1)) == 10
|