From cc414484858591dc2341da0dd5b296f35befb3f8 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 12 May 2020 22:35:19 -0300 Subject: [PATCH 01/20] Add tags in the CloudFormation template. --- testing/cloudformation.yaml | 95 ++++++++++------ testing/test_awswrangler/_utils.py | 2 + testing/test_awswrangler/test_cloudwatch.py | 5 +- testing/test_awswrangler/test_data_lake.py | 119 ++++++++++---------- testing/test_awswrangler/test_db.py | 5 +- testing/test_awswrangler/test_emr.py | 5 +- 6 files changed, 133 insertions(+), 98 deletions(-) diff --git a/testing/cloudformation.yaml b/testing/cloudformation.yaml index b62062112..0cfb3f6c8 100644 --- a/testing/cloudformation.yaml +++ b/testing/cloudformation.yaml @@ -1,6 +1,5 @@ AWSTemplateFormatVersion: 2010-09-09 -Description: | - AWS Data Wrangler Development Infrastructure +Description: AWS Data Wrangler Development Infrastructure Parameters: DatabasesPassword: Type: String @@ -10,17 +9,17 @@ Resources: VPC: Type: AWS::EC2::VPC Properties: + Tags: + - Key: Env + Value: aws-data-wrangler CidrBlock: 10.19.224.0/19 EnableDnsSupport: true EnableDnsHostnames: true - Tags: - - Key: Name - Value: aws-data-wrangler InternetGateway: Type: AWS::EC2::InternetGateway Properties: Tags: - - Key: Name + - Key: Env Value: aws-data-wrangler InternetGatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment @@ -32,6 +31,9 @@ Resources: PublicSubnet1: Type: AWS::EC2::Subnet Properties: + Tags: + - Key: Env + Value: aws-data-wrangler VpcId: Ref: VPC AvailabilityZone: @@ -40,12 +42,12 @@ Resources: - Fn::GetAZs: '' CidrBlock: 10.19.229.0/24 MapPublicIpOnLaunch: true - Tags: - - Key: Name - Value: aws-data-wrangler Public Subnet (AZ1) PublicSubnet2: Type: AWS::EC2::Subnet Properties: + Tags: + - Key: Env + Value: aws-data-wrangler VpcId: Ref: VPC AvailabilityZone: @@ -54,17 +56,14 @@ Resources: - Fn::GetAZs: '' CidrBlock: 10.19.230.0/24 MapPublicIpOnLaunch: true - Tags: - - Key: Name - Value: aws-data-wrangler Public Subnet (AZ2) PublicRouteTable: Type: AWS::EC2::RouteTable Properties: + Tags: + - Key: Env + Value: aws-data-wrangler VpcId: Ref: VPC - Tags: - - Key: Name - Value: aws-data-wrangler Public Routes DefaultPublicRoute: Type: AWS::EC2::Route DependsOn: InternetGatewayAttachment @@ -97,6 +96,9 @@ Resources: KmsKey: Type: AWS::KMS::Key Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Description: Aws Data Wrangler Test Key. KeyPolicy: Version: '2012-10-17' @@ -112,7 +114,8 @@ Resources: - Sid: Allow administration of the key Effect: Allow Principal: - AWS: '*' + AWS: + Ref: AWS::AccountId Action: - kms:Create* - kms:Describe* @@ -130,6 +133,9 @@ Resources: Bucket: Type: AWS::S3::Bucket Properties: + Tags: + - Key: Env + Value: aws-data-wrangler PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true @@ -146,6 +152,9 @@ Resources: RedshiftRole: Type: AWS::IAM::Role Properties: + Tags: + - Key: Env + Value: aws-data-wrangler AssumeRolePolicyDocument: Version: 2012-10-17 Statement: @@ -205,12 +214,18 @@ Resources: RedshiftSubnetGroup: Type: AWS::Redshift::ClusterSubnetGroup Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Description: AWS Data Wrangler Test Arena - Redshift Subnet Group SubnetIds: - Ref: PublicSubnet1 DatabaseSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: + Tags: + - Key: Env + Value: aws-data-wrangler VpcId: Ref: VPC GroupDescription: AWS Data Wrangler Test Arena - Redshift security group @@ -228,6 +243,9 @@ Resources: Redshift: Type: AWS::Redshift::Cluster Properties: + Tags: + - Key: Env + Value: aws-data-wrangler DBName: test MasterUsername: test MasterUserPassword: @@ -264,6 +282,9 @@ Resources: RdsSubnetGroup: Type: AWS::RDS::DBSubnetGroup Properties: + Tags: + - Key: Env + Value: aws-data-wrangler DBSubnetGroupDescription: RDS Database Subnet Group SubnetIds: - Ref: PublicSubnet1 @@ -271,6 +292,9 @@ Resources: AuroraRole: Type: AWS::IAM::Role Properties: + Tags: + - Key: Env + Value: aws-data-wrangler AssumeRolePolicyDocument: Version: 2012-10-17 Statement: @@ -297,6 +321,9 @@ Resources: PostgresqlParameterGroup: Type: AWS::RDS::DBClusterParameterGroup Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Description: Postgres 11 Family: aurora-postgresql11 Parameters: @@ -304,6 +331,9 @@ Resources: AuroraClusterPostgresql: Type: AWS::RDS::DBCluster Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Engine: aurora-postgresql EngineVersion: '11.6' DBClusterIdentifier: postgresql-cluster-wrangler @@ -326,6 +356,9 @@ Resources: AuroraInstancePostgresql: Type: AWS::RDS::DBInstance Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Engine: aurora-postgresql EngineVersion: '11.6' DBInstanceIdentifier: postgresql-instance-wrangler @@ -338,6 +371,9 @@ Resources: MysqlParameterGroup: Type: AWS::RDS::DBClusterParameterGroup Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Description: Mysql 5.7 Family: aurora-mysql5.7 Parameters: @@ -356,6 +392,9 @@ Resources: AuroraClusterMysql: Type: AWS::RDS::DBCluster Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Engine: aurora-mysql EngineVersion: '5.7' DBClusterIdentifier: mysql-cluster-wrangler @@ -378,6 +417,9 @@ Resources: AuroraInstanceMysql: Type: AWS::RDS::DBInstance Properties: + Tags: + - Key: Env + Value: aws-data-wrangler Engine: aurora-mysql EngineVersion: '5.7' DBInstanceIdentifier: mysql-instance-wrangler @@ -459,21 +501,6 @@ Resources: PASSWORD: Ref: DatabasesPassword Name: aws-data-wrangler-mysql - DynamoDBTable: - Type: AWS::DynamoDB::Table - Properties: - AttributeDefinitions: - - AttributeName: attr_hash - AttributeType: S - - AttributeName: attr_range - AttributeType: S - KeySchema: - - AttributeName: attr_hash - KeyType: HASH - - AttributeName: attr_range - KeyType: RANGE - BillingMode: PAY_PER_REQUEST - TableName: aws-data-wrangler Outputs: BucketName: Value: @@ -542,12 +569,6 @@ Outputs: - AuroraInstanceMysql - Endpoint.Address Description: Mysql Address - DynamoDbTableARN: - Value: - Fn::GetAtt: - - DynamoDBTable - - Arn - Description: DynamoDB table name Region: Value: Ref: AWS::Region diff --git a/testing/test_awswrangler/_utils.py b/testing/test_awswrangler/_utils.py index b4c210cd1..0e53f102d 100644 --- a/testing/test_awswrangler/_utils.py +++ b/testing/test_awswrangler/_utils.py @@ -6,6 +6,8 @@ ts = lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S.%f") # noqa dt = lambda x: datetime.strptime(x, "%Y-%m-%d").date() # noqa +CFN_VALID_STATUS = ["CREATE_COMPLETE", "ROLLBACK_COMPLETE", "UPDATE_COMPLETE", "UPDATE_ROLLBACK_COMPLETE"] + def get_df(): df = pd.DataFrame( diff --git a/testing/test_awswrangler/test_cloudwatch.py b/testing/test_awswrangler/test_cloudwatch.py index 6ae4cf673..6ac4e527a 100644 --- a/testing/test_awswrangler/test_cloudwatch.py +++ b/testing/test_awswrangler/test_cloudwatch.py @@ -7,6 +7,8 @@ import awswrangler as wr from awswrangler import exceptions +from ._utils import CFN_VALID_STATUS + logging.basicConfig(level=logging.INFO, format="[%(asctime)s][%(levelname)s][%(name)s][%(funcName)s] %(message)s") logging.getLogger("awswrangler").setLevel(logging.DEBUG) logging.getLogger("botocore.credentials").setLevel(logging.CRITICAL) @@ -15,8 +17,9 @@ @pytest.fixture(scope="module") def cloudformation_outputs(): response = boto3.client("cloudformation").describe_stacks(StackName="aws-data-wrangler") + stack = [x for x in response.get("Stacks") if x["StackStatus"] in CFN_VALID_STATUS][0] outputs = {} - for output in response.get("Stacks")[0].get("Outputs"): + for output in stack.get("Outputs"): outputs[output.get("OutputKey")] = output.get("OutputValue") yield outputs diff --git a/testing/test_awswrangler/test_data_lake.py b/testing/test_awswrangler/test_data_lake.py index dc7ee3868..59965f00c 100644 --- a/testing/test_awswrangler/test_data_lake.py +++ b/testing/test_awswrangler/test_data_lake.py @@ -12,8 +12,8 @@ import awswrangler as wr -from ._utils import (ensure_data_types, ensure_data_types_category, ensure_data_types_csv, get_df, get_df_cast, - get_df_category, get_df_csv, get_df_list, get_query_long) +from ._utils import (CFN_VALID_STATUS, ensure_data_types, ensure_data_types_category, ensure_data_types_csv, get_df, + get_df_cast, get_df_category, get_df_csv, get_df_list, get_query_long) logging.basicConfig(level=logging.INFO, format="[%(asctime)s][%(levelname)s][%(name)s][%(funcName)s] %(message)s") logging.getLogger("awswrangler").setLevel(logging.DEBUG) @@ -23,8 +23,9 @@ @pytest.fixture(scope="module") def cloudformation_outputs(): response = boto3.client("cloudformation").describe_stacks(StackName="aws-data-wrangler") + stack = [x for x in response.get("Stacks") if x["StackStatus"] in CFN_VALID_STATUS][0] outputs = {} - for output in response.get("Stacks")[0].get("Outputs"): + for output in stack.get("Outputs"): outputs[output.get("OutputKey")] = output.get("OutputValue") yield outputs @@ -70,18 +71,19 @@ def workgroup0(bucket): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name not in wkgs: - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": {"OutputLocation": f"s3://{bucket}/athena_workgroup0/"}, - "EnforceWorkGroupConfiguration": True, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, - }, - Description="AWS Data Wrangler Test WorkGroup Number 0", - ) + if wkg_name in wkgs: + client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": {"OutputLocation": f"s3://{bucket}/athena_workgroup0/"}, + "EnforceWorkGroupConfiguration": True, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, + }, + Description="AWS Data Wrangler Test WorkGroup Number 0", + ) yield wkg_name @@ -91,21 +93,22 @@ def workgroup1(bucket): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name not in wkgs: - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": { - "OutputLocation": f"s3://{bucket}/athena_workgroup1/", - "EncryptionConfiguration": {"EncryptionOption": "SSE_S3"}, - }, - "EnforceWorkGroupConfiguration": True, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, + if wkg_name in wkgs: + client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": { + "OutputLocation": f"s3://{bucket}/athena_workgroup1/", + "EncryptionConfiguration": {"EncryptionOption": "SSE_S3"}, }, - Description="AWS Data Wrangler Test WorkGroup Number 1", - ) + "EnforceWorkGroupConfiguration": True, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, + }, + Description="AWS Data Wrangler Test WorkGroup Number 1", + ) yield wkg_name @@ -115,21 +118,22 @@ def workgroup2(bucket, kms_key): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name not in wkgs: - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": { - "OutputLocation": f"s3://{bucket}/athena_workgroup2/", - "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, - }, - "EnforceWorkGroupConfiguration": False, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, + if wkg_name in wkgs: + client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": { + "OutputLocation": f"s3://{bucket}/athena_workgroup2/", + "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, }, - Description="AWS Data Wrangler Test WorkGroup Number 2", - ) + "EnforceWorkGroupConfiguration": False, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, + }, + Description="AWS Data Wrangler Test WorkGroup Number 2", + ) yield wkg_name @@ -139,21 +143,22 @@ def workgroup3(bucket, kms_key): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name not in wkgs: - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": { - "OutputLocation": f"s3://{bucket}/athena_workgroup3/", - "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, - }, - "EnforceWorkGroupConfiguration": True, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, + if wkg_name in wkgs: + client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": { + "OutputLocation": f"s3://{bucket}/athena_workgroup3/", + "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, }, - Description="AWS Data Wrangler Test WorkGroup Number 3", - ) + "EnforceWorkGroupConfiguration": True, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, + }, + Description="AWS Data Wrangler Test WorkGroup Number 3", + ) yield wkg_name diff --git a/testing/test_awswrangler/test_db.py b/testing/test_awswrangler/test_db.py index 6e5bbd9ce..d1f23c647 100644 --- a/testing/test_awswrangler/test_db.py +++ b/testing/test_awswrangler/test_db.py @@ -9,7 +9,7 @@ import awswrangler as wr -from ._utils import ensure_data_types, ensure_data_types_category, get_df, get_df_category +from ._utils import CFN_VALID_STATUS, ensure_data_types, ensure_data_types_category, get_df, get_df_category logging.basicConfig(level=logging.INFO, format="[%(asctime)s][%(levelname)s][%(name)s][%(funcName)s] %(message)s") logging.getLogger("awswrangler").setLevel(logging.DEBUG) @@ -19,8 +19,9 @@ @pytest.fixture(scope="module") def cloudformation_outputs(): response = boto3.client("cloudformation").describe_stacks(StackName="aws-data-wrangler") + stack = [x for x in response.get("Stacks") if x["StackStatus"] in CFN_VALID_STATUS][0] outputs = {} - for output in response.get("Stacks")[0].get("Outputs"): + for output in stack.get("Outputs"): outputs[output.get("OutputKey")] = output.get("OutputValue") yield outputs diff --git a/testing/test_awswrangler/test_emr.py b/testing/test_awswrangler/test_emr.py index 38c725694..e414fc2e5 100644 --- a/testing/test_awswrangler/test_emr.py +++ b/testing/test_awswrangler/test_emr.py @@ -6,6 +6,8 @@ import awswrangler as wr +from ._utils import CFN_VALID_STATUS + logging.basicConfig(level=logging.INFO, format="[%(asctime)s][%(levelname)s][%(name)s][%(funcName)s] %(message)s") logging.getLogger("awswrangler").setLevel(logging.DEBUG) logging.getLogger("botocore.credentials").setLevel(logging.CRITICAL) @@ -14,8 +16,9 @@ @pytest.fixture(scope="module") def cloudformation_outputs(): response = boto3.client("cloudformation").describe_stacks(StackName="aws-data-wrangler") + stack = [x for x in response.get("Stacks") if x["StackStatus"] in CFN_VALID_STATUS][0] outputs = {} - for output in response.get("Stacks")[0].get("Outputs"): + for output in stack.get("Outputs"): outputs[output.get("OutputKey")] = output.get("OutputValue") yield outputs From 1e976893cc3968f898868a50776ef890277d433a Mon Sep 17 00:00:00 2001 From: igorborgest Date: Wed, 13 May 2020 09:30:12 -0300 Subject: [PATCH 02/20] Update requirements.sh --- .github/workflows/static-checking.yml | 2 +- CONTRIBUTING.md | 2 +- setup-dev-env.sh => requirements.sh | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename setup-dev-env.sh => requirements.sh (100%) diff --git a/.github/workflows/static-checking.yml b/.github/workflows/static-checking.yml index a23a74d99..76291af88 100644 --- a/.github/workflows/static-checking.yml +++ b/.github/workflows/static-checking.yml @@ -25,7 +25,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - name: Setup Environment - run: ./setup-dev-env.sh + run: ./requirements.sh - name: CloudFormation Lint run: cfn-lint -t testing/cloudformation.yaml - name: Documentation Lint diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b41e294d7..336209ef2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -82,7 +82,7 @@ We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikiped * Then run the command bellow to install all dependencies: -`./setup-dev-env.sh` +`./requirements.sh` * Go to the ``testing`` directory diff --git a/setup-dev-env.sh b/requirements.sh similarity index 100% rename from setup-dev-env.sh rename to requirements.sh From babeff4d95f631c34a2b0888794dfe0b7581c8d6 Mon Sep 17 00:00:00 2001 From: Bryan Date: Fri, 15 May 2020 19:08:54 +0800 Subject: [PATCH 03/20] raise Exception if delete_objects failed --- awswrangler/s3.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/awswrangler/s3.py b/awswrangler/s3.py index a6de341b4..58247816e 100644 --- a/awswrangler/s3.py +++ b/awswrangler/s3.py @@ -19,6 +19,7 @@ from boto3.s3.transfer import TransferConfig # type: ignore from pandas.io.common import infer_compression # type: ignore + from awswrangler import _data_types, _utils, catalog, exceptions _COMPRESSION_2_EXT: Dict[Optional[str], str] = {None: "", "gzip": ".gz", "snappy": ".snappy"} @@ -289,7 +290,26 @@ def _split_paths_by_bucket(paths: List[str]) -> Dict[str, List[str]]: def _delete_objects(bucket: str, keys: List[str], client_s3: boto3.client) -> None: _logger.debug("len(keys): %s", len(keys)) batch: List[Dict[str, str]] = [{"Key": key} for key in keys] - client_s3.delete_objects(Bucket=bucket, Delete={"Objects": batch}) + res = client_s3.delete_objects(Bucket=bucket, Delete={"Objects": batch}) + deleted = res.get('Deleted') + errors = res.get('Errors') + if errors: + for i in errors: + raise exceptions.ServiceApiError( + 'Path: s3://{}/{}\n' + 'Error Code: {}\n' + 'Message: {}'.format( + bucket, + i.get('Key'), + i.get('Code'), + i.get('Message') + ) + ) + else: + for i in deleted: + _logger.debug( + 's3://{}/{} has been deleted'.format(bucket, i.get('Key')) + ) def describe_objects( From 10091b7dd409986ef9aab35ac787f9a25a6c5a64 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Fri, 15 May 2020 13:31:14 -0300 Subject: [PATCH 04/20] Refactoring the parquet crawler --- awswrangler/_data_types.py | 20 +- awswrangler/_utils.py | 56 +++- awswrangler/athena.py | 4 +- awswrangler/catalog.py | 11 +- awswrangler/exceptions.py | 4 + awswrangler/s3.py | 146 +++++++--- requirements-dev.txt | 4 +- testing/cloudformation.yaml | 4 + testing/test_awswrangler/_utils.py | 6 + testing/test_awswrangler/test_data_lake.py | 322 +++++++++++++++------ 10 files changed, 425 insertions(+), 152 deletions(-) diff --git a/awswrangler/_data_types.py b/awswrangler/_data_types.py index 819ce0f98..8d165e814 100644 --- a/awswrangler/_data_types.py +++ b/awswrangler/_data_types.py @@ -381,20 +381,6 @@ def athena_types_from_pyarrow_schema( return columns_types, partitions_types -def athena_partitions_from_pyarrow_partitions( - path: str, partitions: pyarrow.parquet.ParquetPartitions -) -> Dict[str, List[str]]: - """Extract the related Athena partitions values from any PyArrow Partitions.""" - path = path if path[-1] == "/" else f"{path}/" - partitions_values: Dict[str, List[str]] = {} - names: List[str] = [p.name for p in partitions] - for values in zip(*[p.keys for p in partitions]): - suffix: str = "/".join([f"{n}={v}" for n, v in zip(names, values)]) - suffix = suffix if suffix[-1] == "/" else f"{suffix}/" - partitions_values[f"{path}{suffix}"] = list(values) - return partitions_values - - def cast_pandas_with_athena_types(df: pd.DataFrame, dtype: Dict[str, str]) -> pd.DataFrame: """Cast columns in a Pandas DataFrame.""" for col, athena_type in dtype.items(): @@ -412,6 +398,12 @@ def cast_pandas_with_athena_types(df: pd.DataFrame, dtype: Dict[str, str]) -> pd .astype("string") .apply(lambda x: Decimal(str(x)) if str(x) not in ("", "none", " ", "") else None) ) + elif pandas_type == "string": + curr_type: str = str(df[col].dtypes) + if curr_type.startswith("int") or curr_type.startswith("float"): + df[col] = df[col].astype(str).astype("string") + else: + df[col] = df[col].astype("string") else: df[col] = df[col].astype(pandas_type) return df diff --git a/awswrangler/_utils.py b/awswrangler/_utils.py index 20c9f27ec..024bae444 100644 --- a/awswrangler/_utils.py +++ b/awswrangler/_utils.py @@ -3,6 +3,7 @@ import logging import math import os +import random from typing import Any, Dict, Generator, List, Optional, Tuple import boto3 # type: ignore @@ -11,7 +12,9 @@ import psycopg2 # type: ignore import s3fs # type: ignore -logger: logging.Logger = logging.getLogger(__name__) +from awswrangler import exceptions + +_logger: logging.Logger = logging.getLogger(__name__) def ensure_session(session: Optional[boto3.Session] = None) -> boto3.Session: @@ -124,6 +127,8 @@ def chunkify(lst: List[Any], num_chunks: int = 1, max_length: Optional[int] = No [[0, 1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] """ + if not lst: + return [] n: int = num_chunks if max_length is None else int(math.ceil((float(len(lst)) / float(max_length)))) np_chunks = np.array_split(lst, n) return [arr.tolist() for arr in np_chunks if len(arr) > 0] @@ -179,3 +184,52 @@ def get_region_from_subnet(subnet_id: str, boto3_session: Optional[boto3.Session session: boto3.Session = ensure_session(session=boto3_session) client_ec2: boto3.client = client(service_name="ec2", session=session) return client_ec2.describe_subnets(SubnetIds=[subnet_id])["Subnets"][0]["AvailabilityZone"][:9] + + +def extract_partitions_from_paths( + path: str, paths: List[str] +) -> Tuple[Optional[Dict[str, str]], Optional[Dict[str, List[str]]]]: + """Extract partitions from Amazon S3 paths.""" + path = path if path.endswith("/") else f"{path}/" + partitions_types: Dict[str, str] = {} + partitions_values: Dict[str, List[str]] = {} + for p in paths: + if path not in p: + raise exceptions.InvalidArgumentValue(f"Object {p} is not under the root path ({path}).") + path_wo_filename: str = p.rpartition("/")[0] + "/" + if path_wo_filename not in partitions_values: + path_wo_prefix: str = p.replace(f"{path}/", "") + dirs: List[str] = [x for x in path_wo_prefix.split("/") if (x != "") and ("=" in x)] + if dirs: + values_tups: List[Tuple[str, str]] = [tuple(x.split("=")[:2]) for x in dirs] # type: ignore + values_dics: Dict[str, str] = dict(values_tups) + p_values: List[str] = list(values_dics.values()) + p_types: Dict[str, str] = {x: "string" for x in values_dics.keys()} + if not partitions_types: + partitions_types = p_types + if p_values: + partitions_types = p_types + partitions_values[path_wo_filename] = p_values + elif p_types != partitions_types: + raise exceptions.InvalidSchemaConvergence( + f"At least two different partitions schema detected: {partitions_types} and {p_types}" + ) + if not partitions_types: + return None, None + return partitions_types, partitions_values + + +def list_sampling(lst: List[Any], sampling: float) -> List[Any]: + """Random List sampling.""" + if sampling > 1.0 or sampling <= 0.0: + raise exceptions.InvalidArgumentValue(f"Argument must be [0.0 < value <= 1.0]. {sampling} received.") + _len: int = len(lst) + if _len == 0: + return [] + num_samples: int = int(round(_len * sampling)) + num_samples = _len if num_samples > _len else num_samples + num_samples = 1 if num_samples < 1 else num_samples + _logger.debug("_len: %s", _len) + _logger.debug("sampling: %s", sampling) + _logger.debug("num_samples: %s", num_samples) + return random.sample(population=lst, k=num_samples) diff --git a/awswrangler/athena.py b/awswrangler/athena.py index 671dabd42..c020c1d98 100644 --- a/awswrangler/athena.py +++ b/awswrangler/athena.py @@ -282,6 +282,8 @@ def repair_table( """ query = f"MSCK REPAIR TABLE `{table}`;" + if (database is not None) and (not database.startswith("`")): + database = f"`{database}`" session: boto3.Session = _utils.ensure_session(session=boto3_session) query_id = start_query_execution( sql=query, @@ -492,7 +494,7 @@ def read_sql_query( # pylint: disable=too-many-branches,too-many-locals,too-man path: str = f"{_s3_output}/{name}" ext_location: str = "\n" if wg_config["enforced"] is True else f",\n external_location = '{path}'\n" sql = ( - f"CREATE TABLE {name}\n" + f'CREATE TABLE "{name}"\n' f"WITH(\n" f" format = 'Parquet',\n" f" parquet_compression = 'SNAPPY'" diff --git a/awswrangler/catalog.py b/awswrangler/catalog.py index 41ef24460..69e56868e 100644 --- a/awswrangler/catalog.py +++ b/awswrangler/catalog.py @@ -240,11 +240,12 @@ def add_parquet_partitions( ... ) """ - inputs: List[Dict[str, Any]] = [ - _parquet_partition_definition(location=k, values=v, compression=compression) - for k, v in partitions_values.items() - ] - _add_partitions(database=database, table=table, boto3_session=boto3_session, inputs=inputs) + if partitions_values: + inputs: List[Dict[str, Any]] = [ + _parquet_partition_definition(location=k, values=v, compression=compression) + for k, v in partitions_values.items() + ] + _add_partitions(database=database, table=table, boto3_session=boto3_session, inputs=inputs) def _parquet_partition_definition(location: str, values: List[str], compression: Optional[str]) -> Dict[str, Any]: diff --git a/awswrangler/exceptions.py b/awswrangler/exceptions.py index b7ad39237..c552d8a5d 100644 --- a/awswrangler/exceptions.py +++ b/awswrangler/exceptions.py @@ -83,3 +83,7 @@ class InvalidRedshiftSortkey(Exception): class InvalidRedshiftPrimaryKeys(Exception): """InvalidRedshiftPrimaryKeys exception.""" + + +class InvalidSchemaConvergence(Exception): + """InvalidSchemaMerge exception.""" diff --git a/awswrangler/s3.py b/awswrangler/s3.py index 58247816e..aa0ebaba9 100644 --- a/awswrangler/s3.py +++ b/awswrangler/s3.py @@ -1067,6 +1067,10 @@ def to_parquet( # pylint: disable=too-many-arguments if compression_ext is None: raise exceptions.InvalidCompression(f"{compression} is invalid, please use None, snappy or gzip.") if dataset is False: + if path.endswith("/"): + raise exceptions.InvalidArgumentValue( + "If , the argument should be a object path, not a directory." + ) if partition_cols: raise exceptions.InvalidArgumentCombination("Please, pass dataset=True to be able to use partition_cols.") if mode is not None: @@ -1079,7 +1083,7 @@ def to_parquet( # pylint: disable=too-many-arguments ) paths = [ _to_parquet_file( - df=df, path=path, schema=None, index=index, compression=compression, cpus=cpus, fs=fs, dtype={} + df=df, path=path, schema=None, index=index, compression=compression, cpus=cpus, fs=fs, dtype=dtype ) ] else: @@ -1487,25 +1491,26 @@ def _read_text( ) -> Union[pd.DataFrame, Iterator[pd.DataFrame]]: if "iterator" in pandas_kwargs: raise exceptions.InvalidArgument("Please, use chunksize instead of iterator.") - paths: List[str] = _path2list(path=path, boto3_session=boto3_session) + session: boto3.Session = _utils.ensure_session(session=boto3_session) + paths: List[str] = _path2list(path=path, boto3_session=session) _logger.debug("paths:\n%s", paths) if chunksize is not None: dfs: Iterator[pd.DataFrame] = _read_text_chunksize( parser_func=parser_func, paths=paths, - boto3_session=boto3_session, + boto3_session=session, chunksize=chunksize, pandas_args=pandas_kwargs, s3_additional_kwargs=s3_additional_kwargs, ) return dfs - if use_threads is False: + if (use_threads is False) or (boto3_session is not None): df: pd.DataFrame = pd.concat( objs=[ _read_text_full( parser_func=parser_func, path=p, - boto3_session=boto3_session, + boto3_session=session, pandas_args=pandas_kwargs, s3_additional_kwargs=s3_additional_kwargs, ) @@ -1522,7 +1527,7 @@ def _read_text( _read_text_full, repeat(parser_func), paths, - repeat(boto3_session), + repeat(None), # Boto3.Session repeat(pandas_kwargs), repeat(s3_additional_kwargs), ), @@ -1545,7 +1550,8 @@ def _read_text_chunksize( _logger.debug("path: %s", path) if pandas_args.get("compression", "infer") == "infer": pandas_args["compression"] = infer_compression(path, compression="infer") - with fs.open(path, "rb") as f: + mode: str = "r" if pandas_args.get("compression") is None else "rb" + with fs.open(path, mode) as f: reader: pandas.io.parsers.TextFileReader = parser_func(f, chunksize=chunksize, **pandas_args) for df in reader: yield df @@ -1561,7 +1567,8 @@ def _read_text_full( fs: s3fs.S3FileSystem = _utils.get_fs(session=boto3_session, s3_additional_kwargs=s3_additional_kwargs) if pandas_args.get("compression", "infer") == "infer": pandas_args["compression"] = infer_compression(path, compression="infer") - with fs.open(path, "rb") as f: + mode: str = "r" if pandas_args.get("compression") is None else "rb" + with fs.open(path, mode) as f: return parser_func(f, **pandas_args) @@ -1805,7 +1812,8 @@ def _table2df(table: pa.Table, categories: List[str] = None, use_threads: bool = def read_parquet_metadata( path: Union[str, List[str]], - filters: Optional[Union[List[Tuple], List[List[Tuple]]]] = None, + dtype: Optional[Dict[str, str]] = None, + sampling: float = 1.0, dataset: bool = False, use_threads: bool = True, boto3_session: Optional[boto3.Session] = None, @@ -1823,8 +1831,15 @@ def read_parquet_metadata( ---------- path : Union[str, List[str]] S3 prefix (e.g. s3://bucket/prefix) or list of S3 objects paths (e.g. [s3://bucket/key0, s3://bucket/key1]). - filters: Union[List[Tuple], List[List[Tuple]]], optional - List of filters to apply, like ``[[('x', '=', 0), ...], ...]``. + dtype : Dict[str, str], optional + Dictionary of columns names and Athena/Glue types to be casted. + Useful when you have columns with undetermined data types as partitions columns. + (e.g. {'col name': 'bigint', 'col2 name': 'int'}) + sampling : float + Random sample ratio of files that will have the metadata inspected. + Must be `0.0 < sampling <= 1.0`. + The higher, the more accurate. + The lower, the faster. dataset: bool If True read a parquet dataset instead of simple file(s) loading all the related partitions as columns. use_threads : bool @@ -1857,19 +1872,75 @@ def read_parquet_metadata( ... ]) """ + return _read_parquet_metadata( + path=path, dtype=dtype, sampling=sampling, dataset=dataset, use_threads=use_threads, boto3_session=boto3_session + )[:2] + + +def _read_parquet_metadata( + path: Union[str, List[str]], + dtype: Optional[Dict[str, str]], + sampling: float, + dataset: bool, + use_threads: bool, + boto3_session: Optional[boto3.Session], +) -> Tuple[Dict[str, str], Optional[Dict[str, str]], Optional[Dict[str, List[str]]]]: + session: boto3.Session = _utils.ensure_session(session=boto3_session) + if dataset is True: + if isinstance(path, str): + _path: Optional[str] = path if path.endswith("/") else f"{path}/" + paths: List[str] = _path2list(path=_path, boto3_session=session) + else: + raise exceptions.InvalidArgumentType("Argument must be str if dataset=True.") + else: + if isinstance(path, str): + _path = None + paths = _path2list(path=path, boto3_session=session) + elif isinstance(path, list): + _path = None + paths = path + else: + raise exceptions.InvalidArgumentType(f"Argument path must be str or List[str] instead of {type(path)}.") + schemas: List[Dict[str, str]] = [ + _read_parquet_metadata_file(path=x, use_threads=use_threads, boto3_session=session) + for x in _utils.list_sampling(lst=paths, sampling=sampling) + ] + _logger.debug("schemas: %s", schemas) + columns_types: Dict[str, str] = {} + for schema in schemas: + for column, _dtype in schema.items(): + if (column in columns_types) and (columns_types[column] != _dtype): + raise exceptions.InvalidSchemaConvergence( + f"Was detect at least 2 different types in column {column} ({columns_types[column]} and {dtype})." + ) + columns_types[column] = _dtype + partitions_types: Optional[Dict[str, str]] = None + partitions_values: Optional[Dict[str, List[str]]] = None + if (dataset is True) and (_path is not None): + partitions_types, partitions_values = _utils.extract_partitions_from_paths(path=_path, paths=paths) + if dtype: + for k, v in dtype.items(): + if columns_types and k in columns_types: + columns_types[k] = v + if partitions_types and k in partitions_types: + partitions_types[k] = v + _logger.debug("columns_types: %s", columns_types) + return columns_types, partitions_types, partitions_values + + +def _read_parquet_metadata_file(path: str, use_threads: bool, boto3_session: boto3.Session) -> Dict[str, str]: data: pyarrow.parquet.ParquetDataset = _read_parquet_init( - path=path, filters=filters, dataset=dataset, use_threads=use_threads, boto3_session=boto3_session - ) - return _data_types.athena_types_from_pyarrow_schema( - schema=data.schema.to_arrow_schema(), partitions=data.partitions + path=path, filters=None, dataset=False, use_threads=use_threads, boto3_session=boto3_session ) + return _data_types.athena_types_from_pyarrow_schema(schema=data.schema.to_arrow_schema(), partitions=None)[0] def store_parquet_metadata( path: str, database: str, table: str, - filters: Optional[Union[List[Tuple], List[List[Tuple]]]] = None, + dtype: Optional[Dict[str, str]] = None, + sampling: float = 1.0, dataset: bool = False, use_threads: bool = True, description: Optional[str] = None, @@ -1905,8 +1976,15 @@ def store_parquet_metadata( Glue/Athena catalog: Database name. table : str Glue/Athena catalog: Table name. - filters: Union[List[Tuple], List[List[Tuple]]], optional - List of filters to apply, like ``[[('x', '=', 0), ...], ...]``. + dtype : Dict[str, str], optional + Dictionary of columns names and Athena/Glue types to be casted. + Useful when you have columns with undetermined data types as partitions columns. + (e.g. {'col name': 'bigint', 'col2 name': 'int'}) + sampling : float + Random sample ratio of files that will have the metadata inspected. + Must be `0.0 < sampling <= 1.0`. + The higher, the more accurate. + The lower, the faster. dataset: bool If True read a parquet dataset instead of simple file(s) loading all the related partitions as columns. use_threads : bool @@ -1953,13 +2031,15 @@ def store_parquet_metadata( """ session: boto3.Session = _utils.ensure_session(session=boto3_session) - data: pyarrow.parquet.ParquetDataset = _read_parquet_init( - path=path, filters=filters, dataset=dataset, use_threads=use_threads, boto3_session=session - ) - partitions: Optional[pyarrow.parquet.ParquetPartitions] = data.partitions - columns_types, partitions_types = _data_types.athena_types_from_pyarrow_schema( - schema=data.schema.to_arrow_schema(), partitions=partitions + columns_types: Dict[str, str] + partitions_types: Optional[Dict[str, str]] + partitions_values: Optional[Dict[str, List[str]]] + columns_types, partitions_types, partitions_values = _read_parquet_metadata( + path=path, dtype=dtype, sampling=sampling, dataset=dataset, use_threads=use_threads, boto3_session=session ) + _logger.debug("columns_types: %s", columns_types) + _logger.debug("partitions_types: %s", partitions_types) + _logger.debug("partitions_values: %s", partitions_values) catalog.create_parquet_table( database=database, table=table, @@ -1973,16 +2053,14 @@ def store_parquet_metadata( catalog_versioning=catalog_versioning, boto3_session=session, ) - partitions_values: Dict[str, List[str]] = _data_types.athena_partitions_from_pyarrow_partitions( - path=path, partitions=partitions - ) - catalog.add_parquet_partitions( - database=database, - table=table, - partitions_values=partitions_values, - compression=compression, - boto3_session=session, - ) + if (partitions_types is not None) and (partitions_values is not None): + catalog.add_parquet_partitions( + database=database, + table=table, + partitions_values=partitions_values, + compression=compression, + boto3_session=session, + ) return columns_types, partitions_types, partitions_values diff --git a/requirements-dev.txt b/requirements-dev.txt index 19ad71a62..76554ff30 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,7 +1,7 @@ awscli>=1.18.0,<2.0.0 black~=19.3b0 pylint~=2.5.2 -flake8~=3.7.9 +flake8~=3.8.1 mypy~=0.770 isort~=4.3.21 pydocstyle~=5.0.2 @@ -11,7 +11,7 @@ pytest~=5.4.2 pytest-cov~=2.8.1 pytest-xdist~=1.32.0 scikit-learn~=0.22.1 -cfn-lint~=0.30.1 +cfn-lint~=0.31.1 cfn-flip~=1.2.3 twine~=3.1.1 wheel~=0.34.2 diff --git a/testing/cloudformation.yaml b/testing/cloudformation.yaml index 0cfb3f6c8..70f5bb279 100644 --- a/testing/cloudformation.yaml +++ b/testing/cloudformation.yaml @@ -330,6 +330,7 @@ Resources: apg_plan_mgmt.capture_plan_baselines: 'off' AuroraClusterPostgresql: Type: AWS::RDS::DBCluster + DeletionPolicy: Delete Properties: Tags: - Key: Env @@ -355,6 +356,7 @@ Resources: - Arn AuroraInstancePostgresql: Type: AWS::RDS::DBInstance + DeletionPolicy: Delete Properties: Tags: - Key: Env @@ -391,6 +393,7 @@ Resources: - Arn AuroraClusterMysql: Type: AWS::RDS::DBCluster + DeletionPolicy: Delete Properties: Tags: - Key: Env @@ -416,6 +419,7 @@ Resources: - Arn AuroraInstanceMysql: Type: AWS::RDS::DBInstance + DeletionPolicy: Delete Properties: Tags: - Key: Env diff --git a/testing/test_awswrangler/_utils.py b/testing/test_awswrangler/_utils.py index 0e53f102d..40481c689 100644 --- a/testing/test_awswrangler/_utils.py +++ b/testing/test_awswrangler/_utils.py @@ -1,3 +1,4 @@ +import random from datetime import datetime from decimal import Decimal @@ -401,3 +402,8 @@ def ensure_data_types_csv(df): assert str(df["par0"].dtype).startswith("Int") if "par1" in df: assert str(df["par1"].dtype) == "string" + + +def get_time_str_with_random_suffix(): + time_str = datetime.utcnow().strftime("%Y%m%d%H%M%S%f") + return f"{time_str}_{random.randrange(16**4):04x}" diff --git a/testing/test_awswrangler/test_data_lake.py b/testing/test_awswrangler/test_data_lake.py index 59965f00c..93069be54 100644 --- a/testing/test_awswrangler/test_data_lake.py +++ b/testing/test_awswrangler/test_data_lake.py @@ -1,9 +1,11 @@ import bz2 import datetime import gzip +import itertools import logging import lzma import math +import time from io import BytesIO, TextIOWrapper import boto3 @@ -13,7 +15,8 @@ import awswrangler as wr from ._utils import (CFN_VALID_STATUS, ensure_data_types, ensure_data_types_category, ensure_data_types_csv, get_df, - get_df_cast, get_df_category, get_df_csv, get_df_list, get_query_long) + get_df_cast, get_df_category, get_df_csv, get_df_list, get_query_long, + get_time_str_with_random_suffix) logging.basicConfig(level=logging.INFO, format="[%(asctime)s][%(levelname)s][%(name)s][%(funcName)s] %(message)s") logging.getLogger("awswrangler").setLevel(logging.DEBUG) @@ -71,19 +74,18 @@ def workgroup0(bucket): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name in wkgs: - client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": {"OutputLocation": f"s3://{bucket}/athena_workgroup0/"}, - "EnforceWorkGroupConfiguration": True, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, - }, - Description="AWS Data Wrangler Test WorkGroup Number 0", - ) + if wkg_name not in wkgs: + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": {"OutputLocation": f"s3://{bucket}/athena_workgroup0/"}, + "EnforceWorkGroupConfiguration": True, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, + }, + Description="AWS Data Wrangler Test WorkGroup Number 0", + ) yield wkg_name @@ -93,22 +95,21 @@ def workgroup1(bucket): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name in wkgs: - client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": { - "OutputLocation": f"s3://{bucket}/athena_workgroup1/", - "EncryptionConfiguration": {"EncryptionOption": "SSE_S3"}, + if wkg_name not in wkgs: + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": { + "OutputLocation": f"s3://{bucket}/athena_workgroup1/", + "EncryptionConfiguration": {"EncryptionOption": "SSE_S3"}, + }, + "EnforceWorkGroupConfiguration": True, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, }, - "EnforceWorkGroupConfiguration": True, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, - }, - Description="AWS Data Wrangler Test WorkGroup Number 1", - ) + Description="AWS Data Wrangler Test WorkGroup Number 1", + ) yield wkg_name @@ -118,22 +119,21 @@ def workgroup2(bucket, kms_key): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name in wkgs: - client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": { - "OutputLocation": f"s3://{bucket}/athena_workgroup2/", - "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, + if wkg_name not in wkgs: + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": { + "OutputLocation": f"s3://{bucket}/athena_workgroup2/", + "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, + }, + "EnforceWorkGroupConfiguration": False, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, }, - "EnforceWorkGroupConfiguration": False, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, - }, - Description="AWS Data Wrangler Test WorkGroup Number 2", - ) + Description="AWS Data Wrangler Test WorkGroup Number 2", + ) yield wkg_name @@ -143,25 +143,72 @@ def workgroup3(bucket, kms_key): client = boto3.client("athena") wkgs = client.list_work_groups() wkgs = [x["Name"] for x in wkgs["WorkGroups"]] - if wkg_name in wkgs: - client.delete_work_group(WorkGroup=wkg_name, RecursiveDeleteOption=True) - client.create_work_group( - Name=wkg_name, - Configuration={ - "ResultConfiguration": { - "OutputLocation": f"s3://{bucket}/athena_workgroup3/", - "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, + if wkg_name not in wkgs: + client.create_work_group( + Name=wkg_name, + Configuration={ + "ResultConfiguration": { + "OutputLocation": f"s3://{bucket}/athena_workgroup3/", + "EncryptionConfiguration": {"EncryptionOption": "SSE_KMS", "KmsKey": kms_key}, + }, + "EnforceWorkGroupConfiguration": True, + "PublishCloudWatchMetricsEnabled": True, + "BytesScannedCutoffPerQuery": 100_000_000, + "RequesterPaysEnabled": False, }, - "EnforceWorkGroupConfiguration": True, - "PublishCloudWatchMetricsEnabled": True, - "BytesScannedCutoffPerQuery": 100_000_000, - "RequesterPaysEnabled": False, - }, - Description="AWS Data Wrangler Test WorkGroup Number 3", - ) + Description="AWS Data Wrangler Test WorkGroup Number 3", + ) yield wkg_name +@pytest.fixture(scope="function") +def path(bucket): + s3_path = f"s3://{bucket}/{get_time_str_with_random_suffix()}/" + print(f"S3 Path: {s3_path}") + time.sleep(1) + objs = wr.s3.list_objects(s3_path) + wr.s3.delete_objects(path=objs) + wr.s3.wait_objects_not_exist(objs) + yield s3_path + time.sleep(1) + objs = wr.s3.list_objects(s3_path) + wr.s3.delete_objects(path=objs) + wr.s3.wait_objects_not_exist(objs) + + +@pytest.fixture(scope="function") +def table(database): + name = get_time_str_with_random_suffix() + print(f"Table name: {name}") + wr.catalog.delete_table_if_exists(database=database, table=name) + yield name + wr.catalog.delete_table_if_exists(database=database, table=name) + + +@pytest.fixture(scope="function") +def path2(bucket): + s3_path = f"s3://{bucket}/{get_time_str_with_random_suffix()}/" + print(f"S3 Path: {s3_path}") + time.sleep(1) + objs = wr.s3.list_objects(s3_path) + wr.s3.delete_objects(path=objs) + wr.s3.wait_objects_not_exist(objs) + yield s3_path + time.sleep(1) + objs = wr.s3.list_objects(s3_path) + wr.s3.delete_objects(path=objs) + wr.s3.wait_objects_not_exist(objs) + + +@pytest.fixture(scope="function") +def table2(database): + name = get_time_str_with_random_suffix() + print(f"Table name: {name}") + wr.catalog.delete_table_if_exists(database=database, table=name) + yield name + wr.catalog.delete_table_if_exists(database=database, table=name) + + def test_athena_ctas(bucket, database, kms_key): wr.s3.delete_objects(path=f"s3://{bucket}/test_athena_ctas/") wr.s3.delete_objects(path=f"s3://{bucket}/test_athena_ctas_result/") @@ -247,11 +294,11 @@ def test_athena_ctas(bucket, database, kms_key): wr.s3.delete_objects(path=f"s3://{bucket}/test_athena_ctas_result/") -def test_athena(bucket, database, kms_key, workgroup0, workgroup1): - wr.s3.delete_objects(path=f"s3://{bucket}/test_athena/") +def test_athena(path, database, kms_key, workgroup0, workgroup1): + wr.catalog.delete_table_if_exists(database=database, table="__test_athena") paths = wr.s3.to_parquet( df=get_df(), - path=f"s3://{bucket}/test_athena", + path=path, index=True, use_threads=True, dataset=True, @@ -285,10 +332,6 @@ def test_athena(bucket, database, kms_key, workgroup0, workgroup1): ensure_data_types(df=df) wr.athena.repair_table(table="__test_athena", database=database) wr.catalog.delete_table_if_exists(database=database, table="__test_athena") - wr.s3.delete_objects(path=paths) - wr.s3.wait_objects_not_exist(paths=paths) - wr.s3.delete_objects(path=f"s3://{bucket}/athena_workgroup0/") - wr.s3.delete_objects(path=f"s3://{bucket}/athena_workgroup1/") def test_csv(bucket): @@ -335,13 +378,15 @@ def test_json(bucket): wr.s3.delete_objects(path=[path0, path1], use_threads=False) -def test_fwf(bucket): +def test_fwf(path): text = "1 Herfelingen27-12-18\n2 Lambusart14-06-18\n3Spormaggiore15-04-18" - path0 = f"s3://{bucket}/test_fwf0.txt" - path1 = f"s3://{bucket}/test_fwf1.txt" client_s3 = boto3.client("s3") - client_s3.put_object(Body=text, Bucket=bucket, Key="test_fwf0.txt") - client_s3.put_object(Body=text, Bucket=bucket, Key="test_fwf1.txt") + path0 = f"{path}/0.txt" + bucket, key = wr._utils.parse_path(path0) + client_s3.put_object(Body=text, Bucket=bucket, Key=key) + path1 = f"{path}/1.txt" + bucket, key = wr._utils.parse_path(path1) + client_s3.put_object(Body=text, Bucket=bucket, Key=key) wr.s3.wait_objects_exist(paths=[path0, path1]) df = wr.s3.read_fwf(path=path0, use_threads=False, widths=[1, 12, 8], names=["id", "name", "date"]) assert len(df.index) == 3 @@ -349,7 +394,6 @@ def test_fwf(bucket): df = wr.s3.read_fwf(path=[path0, path1], use_threads=True, widths=[1, 12, 8], names=["id", "name", "date"]) assert len(df.index) == 6 assert len(df.columns) == 3 - wr.s3.delete_objects(path=[path0, path1], use_threads=False) def test_parquet(bucket): @@ -793,15 +837,13 @@ def test_category(bucket, database): assert wr.catalog.delete_table_if_exists(database=database, table="test_category") is True -def test_parquet_validate_schema(bucket, database): - path = f"s3://{bucket}/test_parquet_file_validate/" - wr.s3.delete_objects(path=path) +def test_parquet_validate_schema(path): df = pd.DataFrame({"id": [1, 2, 3]}) - path_file = f"s3://{bucket}/test_parquet_file_validate/0.parquet" + path_file = f"{path}0.parquet" wr.s3.to_parquet(df=df, path=path_file) wr.s3.wait_objects_exist(paths=[path_file]) df2 = pd.DataFrame({"id2": [1, 2, 3], "val": ["foo", "boo", "bar"]}) - path_file2 = f"s3://{bucket}/test_parquet_file_validate/1.parquet" + path_file2 = f"{path}1.parquet" wr.s3.to_parquet(df=df2, path=path_file2) wr.s3.wait_objects_exist(paths=[path_file2], use_threads=False) df3 = wr.s3.read_parquet(path=path, validate_schema=False) @@ -809,9 +851,6 @@ def test_parquet_validate_schema(bucket, database): assert len(df3.columns) == 3 with pytest.raises(ValueError): wr.s3.read_parquet(path=path, validate_schema=True) - with pytest.raises(ValueError): - wr.s3.store_parquet_metadata(path=path, database=database, table="test_parquet_validate_schema", dataset=True) - wr.s3.delete_objects(path=path) def test_csv_dataset(bucket, database): @@ -1222,8 +1261,10 @@ def test_parquet_chunked(bucket, database, col2, chunked): @pytest.mark.parametrize("workgroup", [None, 0, 1, 2, 3]) @pytest.mark.parametrize("encryption", [None, "SSE_S3", "SSE_KMS"]) +# @pytest.mark.parametrize("workgroup", [3]) +# @pytest.mark.parametrize("encryption", [None]) def test_athena_encryption( - bucket, database, kms_key, encryption, workgroup, workgroup0, workgroup1, workgroup2, workgroup3 + path, path2, database, table, table2, kms_key, encryption, workgroup, workgroup0, workgroup1, workgroup2, workgroup3 ): kms_key = None if (encryption == "SSE_S3") or (encryption is None) else kms_key if workgroup == 0: @@ -1234,18 +1275,11 @@ def test_athena_encryption( workgroup = workgroup2 elif workgroup == 3: workgroup = workgroup3 - table = f"test_athena_encryption_{str(encryption).lower()}_{str(workgroup).lower()}" - path = f"s3://{bucket}/{table}/" - wr.s3.delete_objects(path=path) df = pd.DataFrame({"a": [1, 2], "b": ["foo", "boo"]}) paths = wr.s3.to_parquet( df=df, path=path, dataset=True, mode="overwrite", database=database, table=table, s3_additional_kwargs=None )["paths"] wr.s3.wait_objects_exist(paths=paths, use_threads=False) - temp_table = table + "2" - s3_output = f"s3://{bucket}/encryptio_s3_output/" - final_destination = f"{s3_output}{temp_table}/" - wr.s3.delete_objects(path=final_destination) df2 = wr.athena.read_sql_table( table=table, ctas_approach=True, @@ -1254,16 +1288,12 @@ def test_athena_encryption( workgroup=workgroup, kms_key=kms_key, keep_files=True, - ctas_temp_table_name=temp_table, - s3_output=s3_output, + ctas_temp_table_name=table2, + s3_output=path2, ) - assert wr.catalog.does_table_exist(database=database, table=temp_table) is False - assert len(wr.s3.list_objects(path=s3_output)) > 2 - print(df2) + assert wr.catalog.does_table_exist(database=database, table=table2) is False assert len(df2.index) == 2 assert len(df2.columns) == 2 - wr.catalog.delete_table_if_exists(database=database, table=table) - wr.s3.delete_objects(path=paths) def test_athena_nested(bucket, database): @@ -1543,3 +1573,105 @@ def test_catalog_parameters(bucket, database): wr.s3.delete_objects(path=path) wr.catalog.delete_table_if_exists(database=database, table=table) + + +def test_metadata_partitions(path): + path = f"{path}0.parquet" + df = pd.DataFrame({"c0": [0, 1, 2], "c1": ["3", "4", "5"], "c2": [6.0, 7.0, 8.0]}) + paths = wr.s3.to_parquet(df=df, path=path, dataset=False)["paths"] + wr.s3.wait_objects_exist(paths=paths, use_threads=False) + columns_types, partitions_types = wr.s3.read_parquet_metadata(path=path, dataset=False) + assert len(columns_types) == len(df.columns) + assert columns_types.get("c0") == "bigint" + assert columns_types.get("c1") == "string" + assert columns_types.get("c2") == "double" + + +@pytest.mark.parametrize("partition_cols", [None, ["c2"], ["c1", "c2"]]) +def test_metadata_partitions_dataset(path, partition_cols): + df = pd.DataFrame({"c0": [0, 1, 2], "c1": [3, 4, 5], "c2": [6, 7, 8]}) + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, partition_cols=partition_cols)["paths"] + wr.s3.wait_objects_exist(paths=paths, use_threads=False) + columns_types, partitions_types = wr.s3.read_parquet_metadata(path=path, dataset=True) + partitions_types = partitions_types if partitions_types is not None else {} + assert len(columns_types) + len(partitions_types) == len(df.columns) + assert columns_types.get("c0") == "bigint" + assert (columns_types.get("c1") == "bigint") or (partitions_types.get("c1") == "string") + assert (columns_types.get("c1") == "bigint") or (partitions_types.get("c1") == "string") + + +@pytest.mark.parametrize("partition_cols", [None, ["c2"], ["c1", "c2"]]) +def test_store_metadata_partitions_dataset(database, table, path, partition_cols): + df = pd.DataFrame({"c0": [0, 1, 2], "c1": [3, 4, 5], "c2": [6, 7, 8]}) + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, partition_cols=partition_cols)["paths"] + wr.s3.wait_objects_exist(paths=paths, use_threads=False) + wr.s3.store_parquet_metadata(path=path, database=database, table=table, dataset=True) + df2 = wr.athena.read_sql_table(table=table, database=database) + assert len(df.index) == len(df2.index) + assert len(df.columns) == len(df2.columns) + assert df.c0.sum() == df2.c0.sum() + assert df.c1.sum() == df2.c1.astype(int).sum() + assert df.c2.sum() == df2.c2.astype(int).sum() + + +def test_json_chunksize(path): + num_files = 10 + df = pd.DataFrame({"id": [1, 2, 3], "value": ["foo", "boo", "bar"]}) + paths = [f"{path}{i}.json" for i in range(num_files)] + for p in paths: + wr.s3.to_json(df, p, orient="records", lines=True) + wr.s3.wait_objects_exist(paths) + dfs = list(wr.s3.read_json(paths, lines=True, chunksize=1)) + assert len(dfs) == (3 * num_files) + for d in dfs: + assert len(d.columns) == 2 + assert d.id.iloc[0] in (1, 2, 3) + assert d.value.iloc[0] in ("foo", "boo", "bar") + + +def test_parquet_cast_string(path): + df = pd.DataFrame({"id": [1, 2, 3], "value": ["foo", "boo", "bar"]}) + path_file = f"{path}0.parquet" + wr.s3.to_parquet(df, path_file, dtype={"id": "string"}) + wr.s3.wait_objects_exist([path_file]) + df2 = wr.s3.read_parquet(path_file) + assert str(df2.id.dtypes) == "string" + df2["id"] = df2["id"].astype(int) + assert df.shape == df2.shape + for col, row in tuple(itertools.product(df.columns, range(3))): + assert df[col].iloc[row] == df2[col].iloc[row] + + +@pytest.mark.parametrize("partition_cols", [None, ["c2"], ["value", "c2"]]) +def test_parquet_cast_string_dataset(path, partition_cols): + df = pd.DataFrame({"id": [1, 2, 3], "value": ["foo", "boo", "bar"], "c2": [4, 5, 6], "c3": [7.0, 8.0, 9.0]}) + paths = wr.s3.to_parquet( + df, path, dataset=True, partition_cols=partition_cols, dtype={"id": "string", "c3": "string"} + )["paths"] + wr.s3.wait_objects_exist(paths) + df2 = wr.s3.read_parquet(path, dataset=True).sort_values("id", ignore_index=True) + assert str(df2.id.dtypes) == "string" + assert str(df2.c3.dtypes) == "string" + df2["id"] = df2["id"].astype(int) + df2["c3"] = df2["c3"].astype(float) + assert df.shape == df2.shape + for col, row in tuple(itertools.product(df.columns, range(3))): + assert df[col].iloc[row] == df2[col].iloc[row] + + +@pytest.mark.parametrize("partition_cols", [None, ["c2"], ["c1", "c2"]]) +def test_store_metadata_partitions_sample_dataset(database, table, path, partition_cols): + num_files = 10 + df = pd.DataFrame({"c0": [0, 1, 2], "c1": [3, 4, 5], "c2": [6, 7, 8]}) + for _ in range(num_files): + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, partition_cols=partition_cols)["paths"] + wr.s3.wait_objects_exist(paths=paths, use_threads=False) + wr.s3.store_parquet_metadata( + path=path, database=database, table=table, dtype={"c1": "bigint", "c2": "smallint"}, sampling=0.25, dataset=True + ) + df2 = wr.athena.read_sql_table(table=table, database=database) + assert len(df.index) * num_files == len(df2.index) + assert len(df.columns) == len(df2.columns) + assert df.c0.sum() * num_files == df2.c0.sum() + assert df.c1.sum() * num_files == df2.c1.sum() + assert df.c2.sum() * num_files == df2.c2.sum() From 2243aace55e6683acf7bf896a1791d178f59e832 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Fri, 15 May 2020 14:26:48 -0300 Subject: [PATCH 05/20] 100% test coverage. --- awswrangler/_data_types.py | 2 +- awswrangler/_utils.py | 12 +++++++----- awswrangler/s3.py | 33 ++++++++++----------------------- 3 files changed, 18 insertions(+), 29 deletions(-) diff --git a/awswrangler/_data_types.py b/awswrangler/_data_types.py index 8d165e814..fd81341a7 100644 --- a/awswrangler/_data_types.py +++ b/awswrangler/_data_types.py @@ -376,7 +376,7 @@ def athena_types_from_pyarrow_schema( _logger.debug("columns_types: %s", columns_types) partitions_types: Optional[Dict[str, str]] = None if partitions is not None: - partitions_types = {p.name: pyarrow2athena(p.dictionary.type) for p in partitions} + partitions_types = {p.name: pyarrow2athena(p.dictionary.type) for p in partitions} # pragma: no cover _logger.debug("partitions_types: %s", partitions_types) return columns_types, partitions_types diff --git a/awswrangler/_utils.py b/awswrangler/_utils.py index 024bae444..6cbe4fd5b 100644 --- a/awswrangler/_utils.py +++ b/awswrangler/_utils.py @@ -128,7 +128,7 @@ def chunkify(lst: List[Any], num_chunks: int = 1, max_length: Optional[int] = No """ if not lst: - return [] + return [] # pragma: no cover n: int = num_chunks if max_length is None else int(math.ceil((float(len(lst)) / float(max_length)))) np_chunks = np.array_split(lst, n) return [arr.tolist() for arr in np_chunks if len(arr) > 0] @@ -195,7 +195,9 @@ def extract_partitions_from_paths( partitions_values: Dict[str, List[str]] = {} for p in paths: if path not in p: - raise exceptions.InvalidArgumentValue(f"Object {p} is not under the root path ({path}).") + raise exceptions.InvalidArgumentValue( + f"Object {p} is not under the root path ({path})." + ) # pragma: no cover path_wo_filename: str = p.rpartition("/")[0] + "/" if path_wo_filename not in partitions_values: path_wo_prefix: str = p.replace(f"{path}/", "") @@ -210,7 +212,7 @@ def extract_partitions_from_paths( if p_values: partitions_types = p_types partitions_values[path_wo_filename] = p_values - elif p_types != partitions_types: + elif p_types != partitions_types: # pragma: no cover raise exceptions.InvalidSchemaConvergence( f"At least two different partitions schema detected: {partitions_types} and {p_types}" ) @@ -221,11 +223,11 @@ def extract_partitions_from_paths( def list_sampling(lst: List[Any], sampling: float) -> List[Any]: """Random List sampling.""" - if sampling > 1.0 or sampling <= 0.0: + if sampling > 1.0 or sampling <= 0.0: # pragma: no cover raise exceptions.InvalidArgumentValue(f"Argument must be [0.0 < value <= 1.0]. {sampling} received.") _len: int = len(lst) if _len == 0: - return [] + return [] # pragma: no cover num_samples: int = int(round(_len * sampling)) num_samples = _len if num_samples > _len else num_samples num_samples = 1 if num_samples < 1 else num_samples diff --git a/awswrangler/s3.py b/awswrangler/s3.py index aa0ebaba9..06037d5dd 100644 --- a/awswrangler/s3.py +++ b/awswrangler/s3.py @@ -19,7 +19,6 @@ from boto3.s3.transfer import TransferConfig # type: ignore from pandas.io.common import infer_compression # type: ignore - from awswrangler import _data_types, _utils, catalog, exceptions _COMPRESSION_2_EXT: Dict[Optional[str], str] = {None: "", "gzip": ".gz", "snappy": ".snappy"} @@ -291,25 +290,13 @@ def _delete_objects(bucket: str, keys: List[str], client_s3: boto3.client) -> No _logger.debug("len(keys): %s", len(keys)) batch: List[Dict[str, str]] = [{"Key": key} for key in keys] res = client_s3.delete_objects(Bucket=bucket, Delete={"Objects": batch}) - deleted = res.get('Deleted') - errors = res.get('Errors') - if errors: - for i in errors: - raise exceptions.ServiceApiError( - 'Path: s3://{}/{}\n' - 'Error Code: {}\n' - 'Message: {}'.format( - bucket, - i.get('Key'), - i.get('Code'), - i.get('Message') - ) - ) - else: + deleted = res.get("Deleted") + if deleted is not None: for i in deleted: - _logger.debug( - 's3://{}/{} has been deleted'.format(bucket, i.get('Key')) - ) + _logger.debug("s3://%s/%s has been deleted.", bucket, i.get("Key")) + errors = res.get("Errors") + if errors is not None: # pragma: no cover + raise exceptions.ServiceApiError(errors) def describe_objects( @@ -1067,7 +1054,7 @@ def to_parquet( # pylint: disable=too-many-arguments if compression_ext is None: raise exceptions.InvalidCompression(f"{compression} is invalid, please use None, snappy or gzip.") if dataset is False: - if path.endswith("/"): + if path.endswith("/"): # pragma: no cover raise exceptions.InvalidArgumentValue( "If , the argument should be a object path, not a directory." ) @@ -1890,7 +1877,7 @@ def _read_parquet_metadata( if isinstance(path, str): _path: Optional[str] = path if path.endswith("/") else f"{path}/" paths: List[str] = _path2list(path=_path, boto3_session=session) - else: + else: # pragma: no cover raise exceptions.InvalidArgumentType("Argument must be str if dataset=True.") else: if isinstance(path, str): @@ -1899,7 +1886,7 @@ def _read_parquet_metadata( elif isinstance(path, list): _path = None paths = path - else: + else: # pragma: no cover raise exceptions.InvalidArgumentType(f"Argument path must be str or List[str] instead of {type(path)}.") schemas: List[Dict[str, str]] = [ _read_parquet_metadata_file(path=x, use_threads=use_threads, boto3_session=session) @@ -1909,7 +1896,7 @@ def _read_parquet_metadata( columns_types: Dict[str, str] = {} for schema in schemas: for column, _dtype in schema.items(): - if (column in columns_types) and (columns_types[column] != _dtype): + if (column in columns_types) and (columns_types[column] != _dtype): # pragma: no cover raise exceptions.InvalidSchemaConvergence( f"Was detect at least 2 different types in column {column} ({columns_types[column]} and {dtype})." ) From ee6b05fdb1acac008a6848fa065a6b1d764fc74f Mon Sep 17 00:00:00 2001 From: igorborgest Date: Fri, 15 May 2020 15:42:58 -0300 Subject: [PATCH 06/20] Add user-friendly msgs for Athena errors. #239 --- awswrangler/athena.py | 15 ++++++++++++++- testing/test_awswrangler/test_data_lake.py | 7 +++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/awswrangler/athena.py b/awswrangler/athena.py index c020c1d98..8708c8857 100644 --- a/awswrangler/athena.py +++ b/awswrangler/athena.py @@ -514,7 +514,20 @@ def read_sql_query( # pylint: disable=too-many-branches,too-many-locals,too-man boto3_session=session, ) _logger.debug("query_id: %s", query_id) - query_response: Dict[str, Any] = wait_query(query_execution_id=query_id, boto3_session=session) + try: + query_response: Dict[str, Any] = wait_query(query_execution_id=query_id, boto3_session=session) + except exceptions.QueryFailed as ex: + if ctas_approach is True: + if "Column name not specified" in str(ex): + raise exceptions.InvalidArgumentValue( + "Please, define all columns names in your query. (E.g. 'SELECT MAX(col1) AS max_col1, ...')" + ) + if "Column type is unknown" in str(ex): + raise exceptions.InvalidArgumentValue( + "Please, define all columns types in your query. " + "(E.g. 'SELECT CAST(NULL AS INTEGER) AS MY_COL, ...')" + ) + raise ex # pragma: no cover if query_response["QueryExecution"]["Status"]["State"] in ["FAILED", "CANCELLED"]: # pragma: no cover reason: str = query_response["QueryExecution"]["Status"]["StateChangeReason"] message_error: str = f"Query error: {reason}" diff --git a/testing/test_awswrangler/test_data_lake.py b/testing/test_awswrangler/test_data_lake.py index 93069be54..3c6d05804 100644 --- a/testing/test_awswrangler/test_data_lake.py +++ b/testing/test_awswrangler/test_data_lake.py @@ -1675,3 +1675,10 @@ def test_store_metadata_partitions_sample_dataset(database, table, path, partiti assert df.c0.sum() * num_files == df2.c0.sum() assert df.c1.sum() * num_files == df2.c1.sum() assert df.c2.sum() * num_files == df2.c2.sum() + + +def test_athena_undefined_column(database): + with pytest.raises(wr.exceptions.InvalidArgumentValue): + wr.athena.read_sql_query("SELECT 1", database) + with pytest.raises(wr.exceptions.InvalidArgumentValue): + wr.athena.read_sql_query("SELECT NULL", database) From c6e5a19aa5c20550cafaac62bb59d81adf9bb541 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Fri, 15 May 2020 16:34:17 -0300 Subject: [PATCH 07/20] Fix Flake8 validation issues. --- testing/test_awswrangler/test_data_lake.py | 8 ++++---- testing/test_awswrangler/test_db.py | 18 +++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/testing/test_awswrangler/test_data_lake.py b/testing/test_awswrangler/test_data_lake.py index 3c6d05804..b768d6216 100644 --- a/testing/test_awswrangler/test_data_lake.py +++ b/testing/test_awswrangler/test_data_lake.py @@ -62,7 +62,7 @@ def external_schema(cloudformation_outputs, database): IAM_ROLE '{cloudformation_outputs["RedshiftRole"]}' REGION '{region}'; """ - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") with engine.connect() as con: con.execute(sql) yield "aws_data_wrangler_external" @@ -254,7 +254,7 @@ def test_athena_ctas(bucket, database, kms_key): # keep_files=False wr.s3.delete_objects(path=s3_output) dfs = wr.athena.read_sql_query( - sql=f"SELECT * FROM test_athena_ctas", + sql="SELECT * FROM test_athena_ctas", database=database, ctas_approach=True, chunksize=1, @@ -272,7 +272,7 @@ def test_athena_ctas(bucket, database, kms_key): # keep_files=True wr.s3.delete_objects(path=s3_output) dfs = wr.athena.read_sql_query( - sql=f"SELECT * FROM test_athena_ctas", + sql="SELECT * FROM test_athena_ctas", database=database, ctas_approach=True, chunksize=2, @@ -720,7 +720,7 @@ def test_athena_query_failed(database): def test_athena_read_list(database): with pytest.raises(wr.exceptions.UnsupportedType): - wr.athena.read_sql_query(sql=f"SELECT ARRAY[1, 2, 3]", database=database, ctas_approach=False) + wr.athena.read_sql_query(sql="SELECT ARRAY[1, 2, 3]", database=database, ctas_approach=False) def test_sanitize_names(): diff --git a/testing/test_awswrangler/test_db.py b/testing/test_awswrangler/test_db.py index d1f23c647..1e07f8bf9 100644 --- a/testing/test_awswrangler/test_db.py +++ b/testing/test_awswrangler/test_db.py @@ -71,7 +71,7 @@ def external_schema(cloudformation_outputs, parameters, glue_database): IAM_ROLE '{parameters["redshift"]["role"]}' REGION '{region}'; """ - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") with engine.connect() as con: con.execute(sql) yield "aws_data_wrangler_external" @@ -160,7 +160,7 @@ def test_redshift_temp_engine(parameters): def test_postgresql_param(): - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-postgresql") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-postgresql") df = wr.db.read_sql_query(sql="SELECT %(value)s as col0", con=engine, params={"value": 1}) assert df["col0"].iloc[0] == 1 df = wr.db.read_sql_query(sql="SELECT %s as col0", con=engine, params=[1]) @@ -170,7 +170,7 @@ def test_postgresql_param(): def test_redshift_copy_unload(bucket, parameters): path = f"s3://{bucket}/test_redshift_copy/" df = get_df().drop(["iint8", "binary"], axis=1, inplace=False) - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") wr.db.copy_to_redshift( df=df, path=path, @@ -220,7 +220,7 @@ def test_redshift_copy_unload(bucket, parameters): def test_redshift_copy_upsert(bucket, parameters): - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") df = pd.DataFrame({"id": list((range(1_000))), "val": list(["foo" if i % 2 == 0 else "boo" for i in range(1_000)])}) df3 = pd.DataFrame( {"id": list((range(1_000, 1_500))), "val": list(["foo" if i % 2 == 0 else "boo" for i in range(500)])} @@ -313,7 +313,7 @@ def test_redshift_copy_upsert(bucket, parameters): ) def test_redshift_exceptions(bucket, parameters, diststyle, distkey, sortstyle, sortkey, exc): df = pd.DataFrame({"id": [1], "name": "joe"}) - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") path = f"s3://{bucket}/test_redshift_exceptions_{random.randint(0, 1_000_000)}/" with pytest.raises(exc): wr.db.copy_to_redshift( @@ -347,7 +347,7 @@ def test_redshift_spectrum(bucket, glue_database, external_schema): partition_cols=["par_int"], )["paths"] wr.s3.wait_objects_exist(paths=paths, use_threads=False) - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") with engine.connect() as con: cursor = con.execute(f"SELECT * FROM {external_schema}.test_redshift_spectrum") rows = cursor.fetchall() @@ -361,7 +361,7 @@ def test_redshift_spectrum(bucket, glue_database, external_schema): def test_redshift_category(bucket, parameters): path = f"s3://{bucket}/test_redshift_category/" df = get_df_category().drop(["binary"], axis=1, inplace=False) - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") wr.db.copy_to_redshift( df=df, path=path, @@ -399,7 +399,7 @@ def test_redshift_unload_extras(bucket, parameters, kms_key_id): schema = parameters["redshift"]["schema"] path = f"s3://{bucket}/{table}/" wr.s3.delete_objects(path=path) - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-redshift") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-redshift") df = pd.DataFrame({"id": [1, 2], "name": ["foo", "boo"]}) wr.db.to_sql(df=df, con=engine, name=table, schema=schema, if_exists="replace", index=False) paths = wr.db.unload_redshift_to_files( @@ -466,7 +466,7 @@ def test_to_sql_cast(parameters, db_type): def test_uuid(parameters): table = "test_uuid" schema = parameters["postgresql"]["schema"] - engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-postgresql") + engine = wr.catalog.get_engine(connection="aws-data-wrangler-postgresql") df = pd.DataFrame( { "id": [1, 2, 3], From 7d2106f317212638e877023a0168fafb3fcd5a51 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Sat, 16 May 2020 11:41:16 -0300 Subject: [PATCH 08/20] Fix DataFrame sanitize for single files in to_parquet(). #240 --- awswrangler/catalog.py | 2 +- awswrangler/s3.py | 17 ++++++++++------- testing/test_awswrangler/test_data_lake.py | 15 ++++++++++++++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/awswrangler/catalog.py b/awswrangler/catalog.py index 69e56868e..49d748ed3 100644 --- a/awswrangler/catalog.py +++ b/awswrangler/catalog.py @@ -640,7 +640,7 @@ def table( def _sanitize_name(name: str) -> str: name = "".join(c for c in unicodedata.normalize("NFD", name) if unicodedata.category(c) != "Mn") # strip accents - name = re.sub("[^A-Za-z0-9_]+", "_", name) # Removing non alphanumeric characters + name = re.sub("[^A-Za-z0-9_]+", "_", name) # Replacing non alphanumeric characters by underscore return re.sub("([a-z0-9])([A-Z])", r"\1_\2", name).lower() # Converting CamelCase to snake_case diff --git a/awswrangler/s3.py b/awswrangler/s3.py index 06037d5dd..1a5590579 100644 --- a/awswrangler/s3.py +++ b/awswrangler/s3.py @@ -1043,11 +1043,19 @@ def to_parquet( # pylint: disable=too-many-arguments ) if df.empty is True: raise exceptions.EmptyDataFrame() - session: boto3.Session = _utils.ensure_session(session=boto3_session) + + # Sanitize table to respect Athena's standards partition_cols = partition_cols if partition_cols else [] dtype = dtype if dtype else {} columns_comments = columns_comments if columns_comments else {} partitions_values: Dict[str, List[str]] = {} + df = catalog.sanitize_dataframe_columns_names(df=df) + partition_cols = [catalog.sanitize_column_name(p) for p in partition_cols] + dtype = {catalog.sanitize_column_name(k): v.lower() for k, v in dtype.items()} + columns_comments = {catalog.sanitize_column_name(k): v for k, v in columns_comments.items()} + df = catalog.drop_duplicated_columns(df=df) + + session: boto3.Session = _utils.ensure_session(session=boto3_session) cpus: int = _utils.ensure_cpu_count(use_threads=use_threads) fs: s3fs.S3FileSystem = _utils.get_fs(session=session, s3_additional_kwargs=s3_additional_kwargs) compression_ext: Optional[str] = _COMPRESSION_2_EXT.get(compression, None) @@ -1075,16 +1083,11 @@ def to_parquet( # pylint: disable=too-many-arguments ] else: mode = "append" if mode is None else mode - if (database is not None) and (table is not None): # Normalize table to respect Athena's standards - df = catalog.sanitize_dataframe_columns_names(df=df) - partition_cols = [catalog.sanitize_column_name(p) for p in partition_cols] - dtype = {catalog.sanitize_column_name(k): v.lower() for k, v in dtype.items()} - columns_comments = {catalog.sanitize_column_name(k): v for k, v in columns_comments.items()} + if (database is not None) and (table is not None): exist: bool = catalog.does_table_exist(database=database, table=table, boto3_session=session) if (exist is True) and (mode in ("append", "overwrite_partitions")): for k, v in catalog.get_table_types(database=database, table=table, boto3_session=session).items(): dtype[k] = v - df = catalog.drop_duplicated_columns(df=df) paths, partitions_values = _to_parquet_dataset( df=df, path=path, diff --git a/testing/test_awswrangler/test_data_lake.py b/testing/test_awswrangler/test_data_lake.py index b768d6216..267b29011 100644 --- a/testing/test_awswrangler/test_data_lake.py +++ b/testing/test_awswrangler/test_data_lake.py @@ -1681,4 +1681,17 @@ def test_athena_undefined_column(database): with pytest.raises(wr.exceptions.InvalidArgumentValue): wr.athena.read_sql_query("SELECT 1", database) with pytest.raises(wr.exceptions.InvalidArgumentValue): - wr.athena.read_sql_query("SELECT NULL", database) + wr.athena.read_sql_query("SELECT NULL AS my_null", database) + + +def test_to_parquet_file_sanitize(path): + df = pd.DataFrame({"C0": [0, 1], "camelCase": [2, 3], "c**--2": [4, 5]}) + path_file = f"{path}0.parquet" + wr.s3.to_parquet(df, path_file) + wr.s3.wait_objects_exist([path_file]) + df2 = wr.s3.read_parquet(path_file) + assert df.shape == df2.shape + assert list(df2.columns) == ["c0", "camel_case", "c_2"] + assert df2.c0.sum() == 1 + assert df2.camel_case.sum() == 5 + assert df2.c_2.sum() == 9 From 6330e37ab0ea699d7ddc87e0d4a04b63768befc3 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Sun, 17 May 2020 19:58:40 -0300 Subject: [PATCH 09/20] Standardize SQLAlchemy types. --- awswrangler/_data_types.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/awswrangler/_data_types.py b/awswrangler/_data_types.py index fd81341a7..aa08860e8 100644 --- a/awswrangler/_data_types.py +++ b/awswrangler/_data_types.py @@ -175,15 +175,15 @@ def pyarrow2sqlalchemy( # pylint: disable=too-many-branches,too-many-return-sta ) -> Optional[VisitableType]: """Pyarrow to Athena data types conversion.""" if pa.types.is_int8(dtype): - return sqlalchemy.types.SmallInteger + return sqlalchemy.types.SMALLINT if pa.types.is_int16(dtype): - return sqlalchemy.types.SmallInteger + return sqlalchemy.types.SMALLINT if pa.types.is_int32(dtype): - return sqlalchemy.types.Integer + return sqlalchemy.types.INTEGER if pa.types.is_int64(dtype): - return sqlalchemy.types.BigInteger + return sqlalchemy.types.BIGINT if pa.types.is_float32(dtype): - return sqlalchemy.types.Float + return sqlalchemy.types.FLOAT if pa.types.is_float64(dtype): if db_type == "mysql": return sqlalchemy.dialects.mysql.DOUBLE @@ -195,25 +195,25 @@ def pyarrow2sqlalchemy( # pylint: disable=too-many-branches,too-many-return-sta f"{db_type} is a invalid database type, please choose between postgresql, mysql and redshift." ) # pragma: no cover if pa.types.is_boolean(dtype): - return sqlalchemy.types.Boolean + return sqlalchemy.types.BOOLEAN if pa.types.is_string(dtype): if db_type == "mysql": - return sqlalchemy.types.Text + return sqlalchemy.types.TEXT if db_type == "postgresql": - return sqlalchemy.types.Text + return sqlalchemy.types.TEXT if db_type == "redshift": return sqlalchemy.types.VARCHAR(length=256) raise exceptions.InvalidDatabaseType( f"{db_type} is a invalid database type. " f"Please choose between postgresql, mysql and redshift." ) # pragma: no cover if pa.types.is_timestamp(dtype): - return sqlalchemy.types.DateTime + return sqlalchemy.types.DATETIME if pa.types.is_date(dtype): - return sqlalchemy.types.Date + return sqlalchemy.types.DATE if pa.types.is_binary(dtype): if db_type == "redshift": raise exceptions.UnsupportedType("Binary columns are not supported for Redshift.") # pragma: no cover - return sqlalchemy.types.Binary + return sqlalchemy.types.BINARY if pa.types.is_decimal(dtype): return sqlalchemy.types.Numeric(precision=dtype.precision, scale=dtype.scale) if pa.types.is_dictionary(dtype): From a0d07772277cfe10f8d76a2c0664aabe7b061b36 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Mon, 18 May 2020 17:21:47 -0300 Subject: [PATCH 10/20] First schema evolution propose for parquet datasets. #232 --- awswrangler/_data_types.py | 35 ++- awswrangler/catalog.py | 183 ++++++++++-- awswrangler/s3.py | 37 ++- docs/source/api.rst | 2 + requirements-dev.txt | 3 +- testing/test_awswrangler/test_data_lake.py | 331 +++++++++++++++++---- tox.ini | 5 +- 7 files changed, 491 insertions(+), 105 deletions(-) diff --git a/awswrangler/_data_types.py b/awswrangler/_data_types.py index aa08860e8..8cd84e7b8 100644 --- a/awswrangler/_data_types.py +++ b/awswrangler/_data_types.py @@ -175,15 +175,15 @@ def pyarrow2sqlalchemy( # pylint: disable=too-many-branches,too-many-return-sta ) -> Optional[VisitableType]: """Pyarrow to Athena data types conversion.""" if pa.types.is_int8(dtype): - return sqlalchemy.types.SMALLINT + return sqlalchemy.types.SmallInteger if pa.types.is_int16(dtype): - return sqlalchemy.types.SMALLINT + return sqlalchemy.types.SmallInteger if pa.types.is_int32(dtype): - return sqlalchemy.types.INTEGER + return sqlalchemy.types.Integer if pa.types.is_int64(dtype): - return sqlalchemy.types.BIGINT + return sqlalchemy.types.BigInteger if pa.types.is_float32(dtype): - return sqlalchemy.types.FLOAT + return sqlalchemy.types.Float if pa.types.is_float64(dtype): if db_type == "mysql": return sqlalchemy.dialects.mysql.DOUBLE @@ -195,25 +195,25 @@ def pyarrow2sqlalchemy( # pylint: disable=too-many-branches,too-many-return-sta f"{db_type} is a invalid database type, please choose between postgresql, mysql and redshift." ) # pragma: no cover if pa.types.is_boolean(dtype): - return sqlalchemy.types.BOOLEAN + return sqlalchemy.types.Boolean if pa.types.is_string(dtype): if db_type == "mysql": - return sqlalchemy.types.TEXT + return sqlalchemy.types.Text if db_type == "postgresql": - return sqlalchemy.types.TEXT + return sqlalchemy.types.Text if db_type == "redshift": return sqlalchemy.types.VARCHAR(length=256) raise exceptions.InvalidDatabaseType( f"{db_type} is a invalid database type. " f"Please choose between postgresql, mysql and redshift." ) # pragma: no cover if pa.types.is_timestamp(dtype): - return sqlalchemy.types.DATETIME + return sqlalchemy.types.DateTime if pa.types.is_date(dtype): - return sqlalchemy.types.DATE + return sqlalchemy.types.Date if pa.types.is_binary(dtype): if db_type == "redshift": raise exceptions.UnsupportedType("Binary columns are not supported for Redshift.") # pragma: no cover - return sqlalchemy.types.BINARY + return sqlalchemy.types.Binary if pa.types.is_decimal(dtype): return sqlalchemy.types.Numeric(precision=dtype.precision, scale=dtype.scale) if pa.types.is_dictionary(dtype): @@ -396,7 +396,7 @@ def cast_pandas_with_athena_types(df: pd.DataFrame, dtype: Dict[str, str]) -> pd df[col] = ( df[col] .astype("string") - .apply(lambda x: Decimal(str(x)) if str(x) not in ("", "none", " ", "") else None) + .apply(lambda x: Decimal(str(x)) if str(x) not in ("", "none", "None", " ", "") else None) ) elif pandas_type == "string": curr_type: str = str(df[col].dtypes) @@ -405,7 +405,16 @@ def cast_pandas_with_athena_types(df: pd.DataFrame, dtype: Dict[str, str]) -> pd else: df[col] = df[col].astype("string") else: - df[col] = df[col].astype(pandas_type) + try: + df[col] = df[col].astype(pandas_type) + except TypeError as ex: + if "object cannot be converted to an IntegerDtype" not in str(ex): + raise ex # pragma: no cover + df[col] = ( + df[col] + .apply(lambda x: int(x) if str(x) not in ("", "none", "None", " ", "") else None) + .astype(pandas_type) + ) return df diff --git a/awswrangler/catalog.py b/awswrangler/catalog.py index 49d748ed3..4a8d6b2d3 100644 --- a/awswrangler/catalog.py +++ b/awswrangler/catalog.py @@ -150,9 +150,33 @@ def create_parquet_table( """ table = sanitize_table_name(table=table) partitions_types = {} if partitions_types is None else partitions_types - table_input: Dict[str, Any] = _parquet_table_definition( - table=table, path=path, columns_types=columns_types, partitions_types=partitions_types, compression=compression - ) + session: boto3.Session = _utils.ensure_session(session=boto3_session) + cat_table_input: Optional[Dict[str, Any]] = _get_table_input(database=database, table=table, boto3_session=session) + table_input: Dict[str, Any] + if (cat_table_input is not None) and (mode in ("append", "overwrite_partitions")): + table_input = cat_table_input + updated: bool = False + cat_cols: Dict[str, str] = {x["Name"]: x["Type"] for x in table_input["StorageDescriptor"]["Columns"]} + for c, t in columns_types.items(): + if c not in cat_cols: + _logger.debug("New column %s with type %s.", c, t) + table_input["StorageDescriptor"]["Columns"].append({"Name": c, "Type": t}) + updated = True + elif t != cat_cols[c]: # Data type change detected! + raise exceptions.InvalidArgumentValue( + f"Data type change detected on column {c}. Old type: {cat_cols[c]}. New type {t}." + ) + if updated is True: + mode = "update" + else: + table_input = _parquet_table_definition( + table=table, + path=path, + columns_types=columns_types, + partitions_types=partitions_types, + compression=compression, + ) + table_exist: bool = cat_table_input is not None _create_table( database=database, table=table, @@ -161,8 +185,9 @@ def create_parquet_table( columns_comments=columns_comments, mode=mode, catalog_versioning=catalog_versioning, - boto3_session=boto3_session, + boto3_session=session, table_input=table_input, + table_exist=table_exist, ) @@ -266,7 +291,9 @@ def _parquet_partition_definition(location: str, values: List[str], compression: } -def get_table_types(database: str, table: str, boto3_session: Optional[boto3.Session] = None) -> Dict[str, str]: +def get_table_types( + database: str, table: str, boto3_session: Optional[boto3.Session] = None +) -> Optional[Dict[str, str]]: """Get all columns and types from a table. Parameters @@ -280,8 +307,8 @@ def get_table_types(database: str, table: str, boto3_session: Optional[boto3.Ses Returns ------- - Dict[str, str] - A dictionary as {'col name': 'col data type'}. + Optional[Dict[str, str]] + If table exists, a dictionary like {'col name': 'col data type'}. Otherwise None. Examples -------- @@ -291,7 +318,10 @@ def get_table_types(database: str, table: str, boto3_session: Optional[boto3.Ses """ client_glue: boto3.client = _utils.client(service_name="glue", session=boto3_session) - response: Dict[str, Any] = client_glue.get_table(DatabaseName=database, Name=table) + try: + response: Dict[str, Any] = client_glue.get_table(DatabaseName=database, Name=table) + except client_glue.exceptions.EntityNotFoundException: + return None dtypes: Dict[str, str] = {} for col in response["Table"]["StorageDescriptor"]["Columns"]: dtypes[col["Name"]] = col["Type"] @@ -938,6 +968,7 @@ def create_csv_table( compression=compression, sep=sep, ) + session: boto3.Session = _utils.ensure_session(session=boto3_session) _create_table( database=database, table=table, @@ -946,8 +977,9 @@ def create_csv_table( columns_comments=columns_comments, mode=mode, catalog_versioning=catalog_versioning, - boto3_session=boto3_session, + boto3_session=session, table_input=table_input, + table_exist=does_table_exist(database=database, table=table, boto3_session=session), ) @@ -961,6 +993,7 @@ def _create_table( catalog_versioning: bool, boto3_session: Optional[boto3.Session], table_input: Dict[str, Any], + table_exist: bool, ): if description is not None: table_input["Description"] = description @@ -978,13 +1011,12 @@ def _create_table( par["Comment"] = columns_comments[name] session: boto3.Session = _utils.ensure_session(session=boto3_session) client_glue: boto3.client = _utils.client(service_name="glue", session=session) - exist: bool = does_table_exist(database=database, table=table, boto3_session=session) - if mode not in ("overwrite", "append", "overwrite_partitions"): # pragma: no cover + skip_archive: bool = not catalog_versioning + if mode not in ("overwrite", "append", "overwrite_partitions", "update"): # pragma: no cover raise exceptions.InvalidArgument( f"{mode} is not a valid mode. It must be 'overwrite', 'append' or 'overwrite_partitions'." ) - if (exist is True) and (mode == "overwrite"): - skip_archive: bool = not catalog_versioning + if (table_exist is True) and (mode == "overwrite"): partitions_values: List[List[str]] = list( _get_partitions(database=database, table=table, boto3_session=session).values() ) @@ -992,9 +1024,12 @@ def _create_table( DatabaseName=database, TableName=table, PartitionsToDelete=[{"Values": v} for v in partitions_values] ) client_glue.update_table(DatabaseName=database, TableInput=table_input, SkipArchive=skip_archive) - elif (exist is True) and (mode in ("append", "overwrite_partitions")) and (parameters is not None): - upsert_table_parameters(parameters=parameters, database=database, table=table, boto3_session=session) - elif exist is False: + elif (table_exist is True) and (mode in ("append", "overwrite_partitions", "update")): + if parameters is not None: + upsert_table_parameters(parameters=parameters, database=database, table=table, boto3_session=session) + if mode == "update": + client_glue.update_table(DatabaseName=database, TableInput=table_input, SkipArchive=skip_archive) + elif table_exist is False: client_glue.create_table(DatabaseName=database, TableInput=table_input) @@ -1379,6 +1414,88 @@ def get_table_parameters( return parameters +def get_table_description( + database: str, table: str, catalog_id: Optional[str] = None, boto3_session: Optional[boto3.Session] = None +) -> str: + """Get table description. + + Parameters + ---------- + database : str + Database name. + table : str + Table name. + catalog_id : str, optional + The ID of the Data Catalog from which to retrieve Databases. + If none is provided, the AWS account ID is used by default. + boto3_session : boto3.Session(), optional + Boto3 Session. The default boto3 session will be used if boto3_session receive None. + + Returns + ------- + str + Description. + + Examples + -------- + >>> import awswrangler as wr + >>> desc = wr.catalog.get_table_description(database="...", table="...") + + """ + client_glue: boto3.client = _utils.client(service_name="glue", session=boto3_session) + args: Dict[str, str] = {} + if catalog_id is not None: + args["CatalogId"] = catalog_id # pragma: no cover + args["DatabaseName"] = database + args["Name"] = table + response: Dict[str, Any] = client_glue.get_table(**args) + desc: str = response["Table"]["Description"] + return desc + + +def get_columns_comments( + database: str, table: str, catalog_id: Optional[str] = None, boto3_session: Optional[boto3.Session] = None +) -> Dict[str, str]: + """Get all columns comments. + + Parameters + ---------- + database : str + Database name. + table : str + Table name. + catalog_id : str, optional + The ID of the Data Catalog from which to retrieve Databases. + If none is provided, the AWS account ID is used by default. + boto3_session : boto3.Session(), optional + Boto3 Session. The default boto3 session will be used if boto3_session receive None. + + Returns + ------- + Dict[str, str] + Columns comments. e.g. {"col1": "foo boo bar"}. + + Examples + -------- + >>> import awswrangler as wr + >>> pars = wr.catalog.get_table_parameters(database="...", table="...") + + """ + client_glue: boto3.client = _utils.client(service_name="glue", session=boto3_session) + args: Dict[str, str] = {} + if catalog_id is not None: + args["CatalogId"] = catalog_id # pragma: no cover + args["DatabaseName"] = database + args["Name"] = table + response: Dict[str, Any] = client_glue.get_table(**args) + comments: Dict[str, str] = {} + for c in response["Table"]["StorageDescriptor"]["Columns"]: + comments[c["Name"]] = c["Comment"] + for p in response["Table"]["PartitionKeys"]: + comments[p["Name"]] = p["Comment"] + return comments + + def upsert_table_parameters( parameters: Dict[str, str], database: str, @@ -1465,14 +1582,36 @@ def overwrite_table_parameters( ... table="...") """ + session: boto3.Session = _utils.ensure_session(session=boto3_session) + table_input: Optional[Dict[str, Any]] = _get_table_input( + database=database, table=table, catalog_id=catalog_id, boto3_session=session + ) + if table_input is None: + raise exceptions.InvalidTable(f"Table {table} does not exist on database {database}.") + table_input["Parameters"] = parameters + args2: Dict[str, Union[str, Dict[str, Any]]] = {} + if catalog_id is not None: + args2["CatalogId"] = catalog_id # pragma: no cover + args2["DatabaseName"] = database + args2["TableInput"] = table_input + client_glue: boto3.client = _utils.client(service_name="glue", session=session) + client_glue.update_table(**args2) + return parameters + + +def _get_table_input( + database: str, table: str, boto3_session: Optional[boto3.Session], catalog_id: Optional[str] = None +) -> Optional[Dict[str, str]]: client_glue: boto3.client = _utils.client(service_name="glue", session=boto3_session) args: Dict[str, str] = {} if catalog_id is not None: args["CatalogId"] = catalog_id # pragma: no cover args["DatabaseName"] = database args["Name"] = table - response: Dict[str, Any] = client_glue.get_table(**args) - response["Table"]["Parameters"] = parameters + try: + response: Dict[str, Any] = client_glue.get_table(**args) + except client_glue.exceptions.EntityNotFoundException: + return None if "DatabaseName" in response["Table"]: del response["Table"]["DatabaseName"] if "CreateTime" in response["Table"]: @@ -1483,10 +1622,4 @@ def overwrite_table_parameters( del response["Table"]["CreatedBy"] if "IsRegisteredWithLakeFormation" in response["Table"]: del response["Table"]["IsRegisteredWithLakeFormation"] - args2: Dict[str, Union[str, Dict[str, Any]]] = {} - if catalog_id is not None: - args2["CatalogId"] = catalog_id # pragma: no cover - args2["DatabaseName"] = database - args2["TableInput"] = response["Table"] - client_glue.update_table(**args2) - return parameters + return response["Table"] diff --git a/awswrangler/s3.py b/awswrangler/s3.py index 1a5590579..b68a1e433 100644 --- a/awswrangler/s3.py +++ b/awswrangler/s3.py @@ -627,11 +627,18 @@ def to_csv( # pylint: disable=too-many-arguments ) if df.empty is True: raise exceptions.EmptyDataFrame() - session: boto3.Session = _utils.ensure_session(session=boto3_session) + + # Sanitize table to respect Athena's standards partition_cols = partition_cols if partition_cols else [] dtype = dtype if dtype else {} columns_comments = columns_comments if columns_comments else {} partitions_values: Dict[str, List[str]] = {} + df = catalog.sanitize_dataframe_columns_names(df=df) + partition_cols = [catalog.sanitize_column_name(p) for p in partition_cols] + dtype = {catalog.sanitize_column_name(k): v.lower() for k, v in dtype.items()} + columns_comments = {catalog.sanitize_column_name(k): v for k, v in columns_comments.items()} + + session: boto3.Session = _utils.ensure_session(session=boto3_session) fs: s3fs.S3FileSystem = _utils.get_fs(session=session, s3_additional_kwargs=s3_additional_kwargs) if dataset is False: if partition_cols: @@ -653,14 +660,14 @@ def to_csv( # pylint: disable=too-many-arguments mode = "append" if mode is None else mode if columns: df = df[columns] - if (database is not None) and (table is not None): # Normalize table to respect Athena's standards - df = catalog.sanitize_dataframe_columns_names(df=df) - partition_cols = [catalog.sanitize_column_name(p) for p in partition_cols] - dtype = {catalog.sanitize_column_name(k): v.lower() for k, v in dtype.items()} - columns_comments = {catalog.sanitize_column_name(k): v for k, v in columns_comments.items()} - exist: bool = catalog.does_table_exist(database=database, table=table, boto3_session=session) - if (exist is True) and (mode in ("append", "overwrite_partitions")): - for k, v in catalog.get_table_types(database=database, table=table, boto3_session=session).items(): + if ( + (mode in ("append", "overwrite_partitions")) and (database is not None) and (table is not None) + ): # Fetching Catalog Types + catalog_types: Optional[Dict[str, str]] = catalog.get_table_types( + database=database, table=table, boto3_session=session + ) + if catalog_types is not None: + for k, v in catalog_types.items(): dtype[k] = v df = catalog.drop_duplicated_columns(df=df) paths, partitions_values = _to_csv_dataset( @@ -1083,10 +1090,14 @@ def to_parquet( # pylint: disable=too-many-arguments ] else: mode = "append" if mode is None else mode - if (database is not None) and (table is not None): - exist: bool = catalog.does_table_exist(database=database, table=table, boto3_session=session) - if (exist is True) and (mode in ("append", "overwrite_partitions")): - for k, v in catalog.get_table_types(database=database, table=table, boto3_session=session).items(): + if ( + (mode in ("append", "overwrite_partitions")) and (database is not None) and (table is not None) + ): # Fetching Catalog Types + catalog_types: Optional[Dict[str, str]] = catalog.get_table_types( + database=database, table=table, boto3_session=session + ) + if catalog_types is not None: + for k, v in catalog_types.items(): dtype[k] = v paths, partitions_values = _to_parquet_dataset( df=df, diff --git a/docs/source/api.rst b/docs/source/api.rst index 7f36e5aa5..9d1619f38 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -64,6 +64,8 @@ AWS Glue Catalog get_engine extract_athena_types get_table_parameters + get_columns_comments + get_table_description upsert_table_parameters overwrite_table_parameters diff --git a/requirements-dev.txt b/requirements-dev.txt index 76554ff30..30cb6182b 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -10,7 +10,8 @@ tox~=3.15.0 pytest~=5.4.2 pytest-cov~=2.8.1 pytest-xdist~=1.32.0 -scikit-learn~=0.22.1 +pytest-timeout~=1.3.4 +scikit-learn~=0.23.0 cfn-lint~=0.31.1 cfn-flip~=1.2.3 twine~=3.1.1 diff --git a/testing/test_awswrangler/test_data_lake.py b/testing/test_awswrangler/test_data_lake.py index 267b29011..34e1adf29 100644 --- a/testing/test_awswrangler/test_data_lake.py +++ b/testing/test_awswrangler/test_data_lake.py @@ -178,7 +178,7 @@ def path(bucket): @pytest.fixture(scope="function") def table(database): - name = get_time_str_with_random_suffix() + name = f"tbl_{get_time_str_with_random_suffix()}" print(f"Table name: {name}") wr.catalog.delete_table_if_exists(database=database, table=name) yield name @@ -202,7 +202,7 @@ def path2(bucket): @pytest.fixture(scope="function") def table2(database): - name = get_time_str_with_random_suffix() + name = f"tbl_{get_time_str_with_random_suffix()}" print(f"Table name: {name}") wr.catalog.delete_table_if_exists(database=database, table=name) yield name @@ -573,28 +573,27 @@ def test_parquet_catalog_casting(bucket, database): assert wr.catalog.delete_table_if_exists(database=database, table="__test_parquet_catalog_casting") is True -def test_catalog(bucket, database): +def test_catalog(path, database, table): account_id = boto3.client("sts").get_caller_identity().get("Account") - path = f"s3://{bucket}/test_catalog/" - wr.catalog.delete_table_if_exists(database=database, table="test_catalog") - assert wr.catalog.does_table_exist(database=database, table="test_catalog") is False + assert wr.catalog.does_table_exist(database=database, table=table) is False wr.catalog.create_parquet_table( database=database, - table="test_catalog", + table=table, path=path, columns_types={"col0": "int", "col1": "double"}, partitions_types={"y": "int", "m": "int"}, compression="snappy", ) - wr.catalog.create_parquet_table( - database=database, table="test_catalog", path=path, columns_types={"col0": "string"}, mode="append" - ) - assert wr.catalog.does_table_exist(database=database, table="test_catalog") is True - assert wr.catalog.delete_table_if_exists(database=database, table="test_catalog") is True - assert wr.catalog.delete_table_if_exists(database=database, table="test_catalog") is False + with pytest.raises(wr.exceptions.InvalidArgumentValue): + wr.catalog.create_parquet_table( + database=database, table=table, path=path, columns_types={"col0": "string"}, mode="append" + ) + assert wr.catalog.does_table_exist(database=database, table=table) is True + assert wr.catalog.delete_table_if_exists(database=database, table=table) is True + assert wr.catalog.delete_table_if_exists(database=database, table=table) is False wr.catalog.create_parquet_table( database=database, - table="test_catalog", + table=table, path=path, columns_types={"col0": "int", "col1": "double"}, partitions_types={"y": "int", "m": "int"}, @@ -602,22 +601,23 @@ def test_catalog(bucket, database): description="Foo boo bar", parameters={"tag": "test"}, columns_comments={"col0": "my int", "y": "year"}, + mode="overwrite", ) wr.catalog.add_parquet_partitions( database=database, - table="test_catalog", + table=table, partitions_values={f"{path}y=2020/m=1/": ["2020", "1"], f"{path}y=2021/m=2/": ["2021", "2"]}, compression="snappy", ) - assert wr.catalog.get_table_location(database=database, table="test_catalog") == path - partitions_values = wr.catalog.get_parquet_partitions(database=database, table="test_catalog") + assert wr.catalog.get_table_location(database=database, table=table) == path + partitions_values = wr.catalog.get_parquet_partitions(database=database, table=table) assert len(partitions_values) == 2 partitions_values = wr.catalog.get_parquet_partitions( - database=database, table="test_catalog", catalog_id=account_id, expression="y = 2021 AND m = 2" + database=database, table=table, catalog_id=account_id, expression="y = 2021 AND m = 2" ) assert len(partitions_values) == 1 assert len(set(partitions_values[f"{path}y=2021/m=2/"]) & {"2021", "2"}) == 2 - dtypes = wr.catalog.get_table_types(database=database, table="test_catalog") + dtypes = wr.catalog.get_table_types(database=database, table=table) assert dtypes["col0"] == "int" assert dtypes["col1"] == "double" assert dtypes["y"] == "int" @@ -628,7 +628,7 @@ def test_catalog(bucket, database): tables = list(wr.catalog.get_tables()) assert len(tables) > 0 for tbl in tables: - if tbl["Name"] == "test_catalog": + if tbl["Name"] == table: assert tbl["TableType"] == "EXTERNAL_TABLE" tables = list(wr.catalog.get_tables(database=database)) assert len(tables) > 0 @@ -638,37 +638,41 @@ def test_catalog(bucket, database): tables = list(wr.catalog.search_tables(text="parquet", catalog_id=account_id)) assert len(tables) > 0 for tbl in tables: - if tbl["Name"] == "test_catalog": + if tbl["Name"] == table: assert tbl["TableType"] == "EXTERNAL_TABLE" # prefix - tables = list(wr.catalog.get_tables(name_prefix="test_cat", catalog_id=account_id)) + tables = list(wr.catalog.get_tables(name_prefix=table[:4], catalog_id=account_id)) assert len(tables) > 0 for tbl in tables: - if tbl["Name"] == "test_catalog": + if tbl["Name"] == table: assert tbl["TableType"] == "EXTERNAL_TABLE" # suffix - tables = list(wr.catalog.get_tables(name_suffix="_catalog", catalog_id=account_id)) + tables = list(wr.catalog.get_tables(name_suffix=table[-4:], catalog_id=account_id)) assert len(tables) > 0 for tbl in tables: - if tbl["Name"] == "test_catalog": + if tbl["Name"] == table: assert tbl["TableType"] == "EXTERNAL_TABLE" # name_contains - tables = list(wr.catalog.get_tables(name_contains="cat", catalog_id=account_id)) + tables = list(wr.catalog.get_tables(name_contains=table[4:-4], catalog_id=account_id)) assert len(tables) > 0 for tbl in tables: - if tbl["Name"] == "test_catalog": + if tbl["Name"] == table: assert tbl["TableType"] == "EXTERNAL_TABLE" # prefix & suffix & name_contains - tables = list(wr.catalog.get_tables(name_prefix="t", name_contains="_", name_suffix="g", catalog_id=account_id)) + tables = list( + wr.catalog.get_tables( + name_prefix=table[0], name_contains=table[3], name_suffix=table[-1], catalog_id=account_id + ) + ) assert len(tables) > 0 for tbl in tables: - if tbl["Name"] == "test_catalog": + if tbl["Name"] == table: assert tbl["TableType"] == "EXTERNAL_TABLE" # prefix & suffix - tables = list(wr.catalog.get_tables(name_prefix="t", name_suffix="g", catalog_id=account_id)) + tables = list(wr.catalog.get_tables(name_prefix=table[0], name_suffix=table[-1], catalog_id=account_id)) assert len(tables) > 0 for tbl in tables: - if tbl["Name"] == "test_catalog": + if tbl["Name"] == table: assert tbl["TableType"] == "EXTERNAL_TABLE" # DataFrames assert len(wr.catalog.databases().index) > 0 @@ -678,17 +682,18 @@ def test_catalog(bucket, database): wr.catalog.tables( database=database, search_text="parquet", - name_prefix="t", - name_contains="_", - name_suffix="g", + name_prefix=table[0], + name_contains=table[3], + name_suffix=table[-1], catalog_id=account_id, ).index ) > 0 ) - assert len(wr.catalog.table(database=database, table="test_catalog").index) > 0 - assert len(wr.catalog.table(database=database, table="test_catalog", catalog_id=account_id).index) > 0 - assert wr.catalog.delete_table_if_exists(database=database, table="test_catalog") is True + assert len(wr.catalog.table(database=database, table=table).index) > 0 + assert len(wr.catalog.table(database=database, table=table, catalog_id=account_id).index) > 0 + with pytest.raises(wr.exceptions.InvalidTable): + wr.catalog.overwrite_table_parameters({"foo": "boo"}, database, "fake_table") def test_s3_get_bucket_region(bucket, region): @@ -1118,10 +1123,7 @@ def test_csv_compress(bucket, compression): wr.s3.delete_objects(path=path) -def test_parquet_char_length(bucket, database, external_schema): - path = f"s3://{bucket}/test_parquet_char_length/" - table = "test_parquet_char_length" - +def test_parquet_char_length(path, database, table, external_schema): df = pd.DataFrame( {"id": [1, 2], "cchar": ["foo", "boo"], "date": [datetime.date(2020, 1, 1), datetime.date(2020, 1, 2)]} ) @@ -1152,9 +1154,6 @@ def test_parquet_char_length(bucket, database, external_schema): assert len(df2.columns) == 3 assert df2.id.sum() == 3 - wr.s3.delete_objects(path=path) - assert wr.catalog.delete_table_if_exists(database=database, table=table) is True - def test_merge(bucket): path = f"s3://{bucket}/test_merge/" @@ -1475,10 +1474,7 @@ def test_parquet_uint64(bucket): wr.s3.delete_objects(path=path) -def test_parquet_overwrite_partition_cols(bucket, database, external_schema): - table = "test_parquet_overwrite_partition_cols" - path = f"s3://{bucket}/{table}/" - wr.s3.delete_objects(path=path) +def test_parquet_overwrite_partition_cols(path, database, table, external_schema): df = pd.DataFrame({"c0": [1, 2, 1, 2], "c1": [1, 2, 1, 2], "c2": [2, 1, 2, 1]}) paths = wr.s3.to_parquet( @@ -1511,9 +1507,6 @@ def test_parquet_overwrite_partition_cols(bucket, database, external_schema): assert df.c1.sum() == 6 assert df.c2.sum() == 6 - wr.s3.delete_objects(path=path) - wr.catalog.delete_table_if_exists(database=database, table=table) - def test_catalog_parameters(bucket, database): table = "test_catalog_parameters" @@ -1695,3 +1688,239 @@ def test_to_parquet_file_sanitize(path): assert df2.c0.sum() == 1 assert df2.camel_case.sum() == 5 assert df2.c_2.sum() == 9 + + +def test_to_parquet_modes(database, table, path, external_schema): + + # Round 1 - Warm up + df = pd.DataFrame({"c0": [0, None]}, dtype="Int64") + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="overwrite", + database=database, + table=table, + description="c0", + parameters={"num_cols": str(len(df.columns)), "num_rows": str(len(df.index))}, + columns_comments={"c0": "0"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert df.shape == df2.shape + assert df.c0.sum() == df2.c0.sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == str(len(df2.columns)) + assert parameters["num_rows"] == str(len(df2.index)) + assert wr.catalog.get_table_description(database, table) == "c0" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "0" + + # Round 2 - Overwrite + df = pd.DataFrame({"c1": [None, 1, None]}, dtype="Int16") + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="overwrite", + database=database, + table=table, + description="c1", + parameters={"num_cols": str(len(df.columns)), "num_rows": str(len(df.index))}, + columns_comments={"c1": "1"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert df.shape == df2.shape + assert df.c1.sum() == df2.c1.sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == str(len(df2.columns)) + assert parameters["num_rows"] == str(len(df2.index)) + assert wr.catalog.get_table_description(database, table) == "c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c1"] == "1" + + # Round 3 - Append + df = pd.DataFrame({"c1": [None, 2, None]}, dtype="Int8") + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="append", + database=database, + table=table, + description="c1", + parameters={"num_cols": str(len(df.columns)), "num_rows": str(len(df.index) * 2)}, + columns_comments={"c1": "1"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert len(df.columns) == len(df2.columns) + assert len(df.index) * 2 == len(df2.index) + assert df.c1.sum() + 1 == df2.c1.sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == str(len(df2.columns)) + assert parameters["num_rows"] == str(len(df2.index)) + assert wr.catalog.get_table_description(database, table) == "c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c1"] == "1" + + # Round 4 - Append + New Column + df = pd.DataFrame({"c2": ["a", None, "b"], "c1": [None, None, None]}) + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="append", + database=database, + table=table, + description="c1+c2", + parameters={"num_cols": "2", "num_rows": "9"}, + columns_comments={"c1": "1", "c2": "2"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert len(df2.columns) == 2 + assert len(df2.index) == 9 + assert df2.c1.sum() == 3 + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "2" + assert parameters["num_rows"] == "9" + assert wr.catalog.get_table_description(database, table) == "c1+c2" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c1"] == "1" + assert comments["c2"] == "2" + + # Round 5 - Append + New Column + Wrong Types + df = pd.DataFrame({"c2": [1], "c3": [True], "c1": ["1"]}) + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="append", + database=database, + table=table, + description="c1+c2+c3", + parameters={"num_cols": "3", "num_rows": "10"}, + columns_comments={"c1": "1!", "c2": "2!", "c3": "3"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert len(df2.columns) == 3 + assert len(df2.index) == 10 + assert df2.c1.sum() == 4 + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "3" + assert parameters["num_rows"] == "10" + assert wr.catalog.get_table_description(database, table) == "c1+c2+c3" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c1"] == "1!" + assert comments["c2"] == "2!" + assert comments["c3"] == "3" + engine = wr.catalog.get_engine("aws-data-wrangler-redshift") + df3 = wr.db.read_sql_table(con=engine, table=table, schema=external_schema) + assert len(df3.columns) == 3 + assert len(df3.index) == 10 + assert df3.c1.sum() == 4 + + # Round 6 - Overwrite Partitioned + df = pd.DataFrame({"c0": ["foo", None], "c1": [0, 1]}) + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="overwrite", + database=database, + table=table, + partition_cols=["c1"], + description="c0+c1", + parameters={"num_cols": "2", "num_rows": "2"}, + columns_comments={"c0": "zero", "c1": "one"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert df.shape == df2.shape + assert df.c1.sum() == df2.c1.sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "2" + assert parameters["num_rows"] == "2" + assert wr.catalog.get_table_description(database, table) == "c0+c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "zero" + assert comments["c1"] == "one" + + # Round 7 - Overwrite Partitions + df = pd.DataFrame({"c0": [None, None], "c1": [0, 2]}) + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="overwrite_partitions", + database=database, + table=table, + partition_cols=["c1"], + description="c0+c1", + parameters={"num_cols": "2", "num_rows": "3"}, + columns_comments={"c0": "zero", "c1": "one"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert len(df2.columns) == 2 + assert len(df2.index) == 3 + assert df2.c1.sum() == 3 + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "2" + assert parameters["num_rows"] == "3" + assert wr.catalog.get_table_description(database, table) == "c0+c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "zero" + assert comments["c1"] == "one" + + # Round 8 - Overwrite Partitions + New Column + Wrong Type + df = pd.DataFrame({"c0": [1, 2], "c1": ["1", "3"], "c2": [True, False]}) + paths = wr.s3.to_parquet( + df=df, + path=path, + dataset=True, + mode="overwrite_partitions", + database=database, + table=table, + partition_cols=["c1"], + description="c0+c1+c2", + parameters={"num_cols": "3", "num_rows": "4"}, + columns_comments={"c0": "zero", "c1": "one", "c2": "two"}, + )["paths"] + wr.s3.wait_objects_exist(paths=paths) + df2 = wr.athena.read_sql_table(table, database) + assert len(df2.columns) == 3 + assert len(df2.index) == 4 + assert df2.c1.sum() == 6 + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "3" + assert parameters["num_rows"] == "4" + assert wr.catalog.get_table_description(database, table) == "c0+c1+c2" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "zero" + assert comments["c1"] == "one" + assert comments["c2"] == "two" + engine = wr.catalog.get_engine("aws-data-wrangler-redshift") + df3 = wr.db.read_sql_table(con=engine, table=table, schema=external_schema) + assert len(df3.columns) == 3 + assert len(df3.index) == 4 + assert df3.c1.sum() == 6 diff --git a/tox.ini b/tox.ini index 018d4cd87..05764a50f 100644 --- a/tox.ini +++ b/tox.ini @@ -5,13 +5,14 @@ envlist = py{37,38,36} deps = pytest pytest-xdist + pytest-timeout moto commands = - pytest -n 8 testing/test_awswrangler + pytest --timeout=600 -n 8 testing/test_awswrangler [testenv:py36] deps = {[testenv]deps} pytest-cov commands = - pytest --cov=awswrangler -n 8 testing/test_awswrangler + pytest --timeout=600 --cov=awswrangler -n 8 testing/test_awswrangler From 6604c066b487f2ff7cff6343a9a9d49736d50724 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 19 May 2020 00:23:25 -0300 Subject: [PATCH 11/20] Add test_store_parquet_metadata_modes() --- testing/test_awswrangler/test_data_lake.py | 204 +++++++++++++++++++++ 1 file changed, 204 insertions(+) diff --git a/testing/test_awswrangler/test_data_lake.py b/testing/test_awswrangler/test_data_lake.py index 34e1adf29..e4f733876 100644 --- a/testing/test_awswrangler/test_data_lake.py +++ b/testing/test_awswrangler/test_data_lake.py @@ -1924,3 +1924,207 @@ def test_to_parquet_modes(database, table, path, external_schema): assert len(df3.columns) == 3 assert len(df3.index) == 4 assert df3.c1.sum() == 6 + + +def test_store_parquet_metadata_modes(database, table, path, external_schema): + + # Round 1 - Warm up + df = pd.DataFrame({"c0": [0, None]}, dtype="Int64") + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, mode="overwrite")["paths"] + wr.s3.wait_objects_exist(paths=paths) + wr.s3.store_parquet_metadata( + path=path, + dataset=True, + mode="overwrite", + database=database, + table=table, + description="c0", + parameters={"num_cols": str(len(df.columns)), "num_rows": str(len(df.index))}, + columns_comments={"c0": "0"}, + ) + df2 = wr.athena.read_sql_table(table, database) + assert df.shape == df2.shape + assert df.c0.sum() == df2.c0.sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == str(len(df2.columns)) + assert parameters["num_rows"] == str(len(df2.index)) + assert wr.catalog.get_table_description(database, table) == "c0" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "0" + + # Round 2 - Overwrite + df = pd.DataFrame({"c1": [None, 1, None]}, dtype="Int16") + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, mode="overwrite")["paths"] + wr.s3.wait_objects_exist(paths=paths) + wr.s3.store_parquet_metadata( + path=path, + dataset=True, + mode="overwrite", + database=database, + table=table, + description="c1", + parameters={"num_cols": str(len(df.columns)), "num_rows": str(len(df.index))}, + columns_comments={"c1": "1"}, + ) + df2 = wr.athena.read_sql_table(table, database) + assert df.shape == df2.shape + assert df.c1.sum() == df2.c1.sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == str(len(df2.columns)) + assert parameters["num_rows"] == str(len(df2.index)) + assert wr.catalog.get_table_description(database, table) == "c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c1"] == "1" + + # Round 3 - Append + df = pd.DataFrame({"c1": [None, 2, None]}, dtype="Int16") + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, mode="append")["paths"] + wr.s3.wait_objects_exist(paths=paths) + wr.s3.store_parquet_metadata( + path=path, + dataset=True, + mode="append", + database=database, + table=table, + description="c1", + parameters={"num_cols": str(len(df.columns)), "num_rows": str(len(df.index) * 2)}, + columns_comments={"c1": "1"}, + ) + df2 = wr.athena.read_sql_table(table, database) + assert len(df.columns) == len(df2.columns) + assert len(df.index) * 2 == len(df2.index) + assert df.c1.sum() + 1 == df2.c1.sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == str(len(df2.columns)) + assert parameters["num_rows"] == str(len(df2.index)) + assert wr.catalog.get_table_description(database, table) == "c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c1"] == "1" + + # Round 4 - Append + New Column + df = pd.DataFrame({"c2": ["a", None, "b"], "c1": [None, 1, None]}) + df["c1"] = df["c1"].astype("Int16") + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, mode="append")["paths"] + wr.s3.wait_objects_exist(paths=paths) + wr.s3.store_parquet_metadata( + path=path, + dataset=True, + mode="append", + database=database, + table=table, + description="c1+c2", + parameters={"num_cols": "2", "num_rows": "9"}, + columns_comments={"c1": "1", "c2": "2"}, + ) + df2 = wr.athena.read_sql_table(table, database) + assert len(df2.columns) == 2 + assert len(df2.index) == 9 + assert df2.c1.sum() == 4 + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "2" + assert parameters["num_rows"] == "9" + assert wr.catalog.get_table_description(database, table) == "c1+c2" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c1"] == "1" + assert comments["c2"] == "2" + + # Round 5 - Overwrite Partitioned + df = pd.DataFrame({"c0": ["foo", None], "c1": [0, 1]}) + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, mode="overwrite", partition_cols=["c1"])["paths"] + wr.s3.wait_objects_exist(paths=paths) + wr.s3.store_parquet_metadata( + path=path, + dataset=True, + mode="overwrite", + database=database, + table=table, + description="c0+c1", + parameters={"num_cols": "2", "num_rows": "2"}, + columns_comments={"c0": "zero", "c1": "one"}, + ) + df2 = wr.athena.read_sql_table(table, database) + assert df.shape == df2.shape + assert df.c1.sum() == df2.c1.astype(int).sum() + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "2" + assert parameters["num_rows"] == "2" + assert wr.catalog.get_table_description(database, table) == "c0+c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "zero" + assert comments["c1"] == "one" + + # Round 6 - Overwrite Partitions + df = pd.DataFrame({"c0": [None, "boo"], "c1": [0, 2]}) + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, mode="overwrite_partitions", partition_cols=["c1"])[ + "paths" + ] + wr.s3.wait_objects_exist(paths=paths) + wr.s3.store_parquet_metadata( + path=path, + dataset=True, + mode="append", + database=database, + table=table, + description="c0+c1", + parameters={"num_cols": "2", "num_rows": "3"}, + columns_comments={"c0": "zero", "c1": "one"}, + ) + df2 = wr.athena.read_sql_table(table, database) + assert len(df2.columns) == 2 + assert len(df2.index) == 3 + assert df2.c1.astype(int).sum() == 3 + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "2" + assert parameters["num_rows"] == "3" + assert wr.catalog.get_table_description(database, table) == "c0+c1" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "zero" + assert comments["c1"] == "one" + + # Round 7 - Overwrite Partitions + New Column + df = pd.DataFrame({"c0": ["bar", None], "c1": [1, 3], "c2": [True, False]}) + paths = wr.s3.to_parquet(df=df, path=path, dataset=True, mode="overwrite_partitions", partition_cols=["c1"])[ + "paths" + ] + wr.s3.wait_objects_exist(paths=paths) + wr.s3.store_parquet_metadata( + path=path, + dataset=True, + mode="append", + database=database, + table=table, + description="c0+c1+c2", + parameters={"num_cols": "3", "num_rows": "4"}, + columns_comments={"c0": "zero", "c1": "one", "c2": "two"}, + ) + df2 = wr.athena.read_sql_table(table, database) + assert len(df2.columns) == 3 + assert len(df2.index) == 4 + assert df2.c1.astype(int).sum() == 6 + parameters = wr.catalog.get_table_parameters(database, table) + assert len(parameters) == 5 + assert parameters["num_cols"] == "3" + assert parameters["num_rows"] == "4" + assert wr.catalog.get_table_description(database, table) == "c0+c1+c2" + comments = wr.catalog.get_columns_comments(database, table) + assert len(comments) == len(df.columns) + assert comments["c0"] == "zero" + assert comments["c1"] == "one" + assert comments["c2"] == "two" + engine = wr.catalog.get_engine("aws-data-wrangler-redshift") + df3 = wr.db.read_sql_table(con=engine, table=table, schema=external_schema) + assert len(df3.columns) == 3 + assert len(df3.index) == 4 + assert df3.c1.astype(int).sum() == 6 From 9c36b704b8ea08778a580226a8f1010c4646db10 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 19 May 2020 08:23:15 -0300 Subject: [PATCH 12/20] Bumping s3fs micro version. #236 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 40fe89901..3e7192b4f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ botocore>=1.15.0,<2.0.0 numpy~=1.18.0 pandas~=1.0.0 pyarrow~=0.17.0 -s3fs~=0.4.0 +s3fs~=0.4.2 psycopg2-binary~=2.8.0 pymysql~=0.9.0 sqlalchemy-redshift~=0.7.0 From 78144ab5ea151451cccdfda97632b81f4f2b42fd Mon Sep 17 00:00:00 2001 From: Kelton Karboviak Date: Tue, 19 May 2020 10:06:35 -0500 Subject: [PATCH 13/20] Fix typos in install doc --- docs/source/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/install.rst b/docs/source/install.rst index 951171f2b..8b758f842 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -44,7 +44,7 @@ AWS Glue Wheel 2 - Upload the wheel file to any Amazon S3 location. -3 - Got to your Glue Python Shell job and point to the new file on s3. +3 - Go to your Glue Python Shell job and point to the new file on S3. Amazon SageMaker Notebook ------------------------- From c8ea710edd6bd9e5aaff1128209c59bbc8bc636f Mon Sep 17 00:00:00 2001 From: "mr.Shu" Date: Tue, 19 May 2020 19:34:52 +0200 Subject: [PATCH 14/20] _utils: Make sure boto3's default session is used * Currently `awswrangler` ensures that at least some boto3 Session is used when it calls AWS resources. However, since it creates a `boto3.Session()` when non-null boto3 Session is passed as a parameter, it completely sidesteps the ability of the user to set parameters to the boto3 session that gets used by default (via the `boto3.setup_default_session` function). * This commit ensures that the `ensure_session` function uses boto3's default session (reachable via `boto3._get_default_session()`) which then also allows `awswrangler` users to set default parameters of the boto3 Session it uses by default via `boto3.setup_default_session()`. Signed-off-by: mr.Shu --- awswrangler/_utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/awswrangler/_utils.py b/awswrangler/_utils.py index 20c9f27ec..c774c2e9c 100644 --- a/awswrangler/_utils.py +++ b/awswrangler/_utils.py @@ -18,7 +18,9 @@ def ensure_session(session: Optional[boto3.Session] = None) -> boto3.Session: """Ensure that a valid boto3.Session will be returned.""" if session is not None: return session - return boto3.Session() + # Ensure the boto3's default session is used so that its parameters can be + # set via boto3.setup_default_session() + return boto3._get_default_session() # pylint: disable=protected-access def client(service_name: str, session: Optional[boto3.Session] = None) -> boto3.client: From 54b33862449d265ea7539d453f2c238a91f5cefc Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 19 May 2020 16:17:32 -0300 Subject: [PATCH 15/20] Add tests to the new default session. #245 --- awswrangler/_utils.py | 4 +- testing/test_awswrangler/test_session.py | 20 +++++++ tutorials/02 - Sessions.ipynb | 70 +++++++++++++++++++++--- 3 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 testing/test_awswrangler/test_session.py diff --git a/awswrangler/_utils.py b/awswrangler/_utils.py index bcb8eab79..b31efd803 100644 --- a/awswrangler/_utils.py +++ b/awswrangler/_utils.py @@ -23,7 +23,9 @@ def ensure_session(session: Optional[boto3.Session] = None) -> boto3.Session: return session # Ensure the boto3's default session is used so that its parameters can be # set via boto3.setup_default_session() - return boto3._get_default_session() # pylint: disable=protected-access + if boto3.DEFAULT_SESSION is not None: + return boto3.DEFAULT_SESSION + return boto3.Session() def client(service_name: str, session: Optional[boto3.Session] = None) -> boto3.client: diff --git a/testing/test_awswrangler/test_session.py b/testing/test_awswrangler/test_session.py new file mode 100644 index 000000000..172f97bba --- /dev/null +++ b/testing/test_awswrangler/test_session.py @@ -0,0 +1,20 @@ +import logging + +import boto3 + +import awswrangler as wr + +logging.basicConfig(level=logging.INFO, format="[%(asctime)s][%(levelname)s][%(name)s][%(funcName)s] %(message)s") +logging.getLogger("awswrangler").setLevel(logging.DEBUG) +logging.getLogger("botocore.credentials").setLevel(logging.CRITICAL) + + +def test_default_session(): + boto3.setup_default_session(region_name="us-east-1") + assert wr._utils.ensure_session().region_name == "us-east-1" + boto3.setup_default_session(region_name="us-east-2") + assert wr._utils.ensure_session().region_name == "us-east-2" + boto3.setup_default_session(region_name="us-west-1") + assert wr._utils.ensure_session().region_name == "us-west-1" + boto3.setup_default_session(region_name="us-west-2") + assert wr._utils.ensure_session().region_name == "us-west-2" diff --git a/tutorials/02 - Sessions.ipynb b/tutorials/02 - Sessions.ipynb index 97b376968..07ace8f94 100644 --- a/tutorials/02 - Sessions.ipynb +++ b/tutorials/02 - Sessions.ipynb @@ -19,7 +19,7 @@ "\n", "Wrangler will not store any kind of state internally, and users is in charge of all the Sessions management, if necessary.\n", "\n", - "Most Wrangler functions receive the optional `boto3_session` argument. If None is received, a default boto3 Session will be temporary created to run the function." + "Most Wrangler functions receive the optional `boto3_session` argument. If None is received, the default boto3 Session will be used." ] }, { @@ -36,7 +36,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Using the default Sessions" + "## Using the default Session" ] }, { @@ -63,7 +63,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Using custom Sessions" + "## Customizing and using the default Session" ] }, { @@ -83,7 +83,61 @@ } ], "source": [ - "wr.s3.does_object_exist(\"s3://noaa-ghcn-pds/fake\", boto3_session=boto3.Session(region_name=\"us-east-2\"))" + "boto3.setup_default_session(region_name=\"us-east-2\")\n", + "\n", + "wr.s3.does_object_exist(\"s3://noaa-ghcn-pds/fake\")" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Using a new custom Session" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "my_session = boto3.Session(region_name=\"us-east-2\")\n", + "\n", + "wr.s3.does_object_exist(\"s3://noaa-ghcn-pds/fake\", boto3_session=my_session)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_session = boto3.Session(region_name=\"us-east-2\")\n", + "\n", + "wr.s3.does_object_exist(\"s3://noaa-ghcn-pds/fake\", boto3_session=my_session)" ] }, { @@ -96,9 +150,9 @@ ], "metadata": { "kernelspec": { - "display_name": "conda_python3", + "display_name": "Python 3", "language": "python", - "name": "conda_python3" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -110,9 +164,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.6.10" } }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file From 69894a267ecc9795c75bb0285f774945fd03b173 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 19 May 2020 17:45:43 -0300 Subject: [PATCH 16/20] Bumping version to 1.2.0 --- README.md | 2 +- awswrangler/__metadata__.py | 2 +- awswrangler/_utils.py | 2 +- docs/source/api.rst | 62 +++++++++++------------ testing/test_awswrangler/test_metadata.py | 2 +- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 99771e475..07ec7a54b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Due the new major version `1.0.0` with breaking changes, please make sure that a ![AWS Data Wrangler](docs/source/_static/logo2.png?raw=true "AWS Data Wrangler") -[![Release](https://img.shields.io/badge/release-1.1.2-brightgreen.svg)](https://pypi.org/project/awswrangler/) +[![Release](https://img.shields.io/badge/release-1.2.0-brightgreen.svg)](https://pypi.org/project/awswrangler/) [![Python Version](https://img.shields.io/badge/python-3.6%20%7C%203.7%20%7C%203.8-brightgreen.svg)](https://anaconda.org/conda-forge/awswrangler) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) diff --git a/awswrangler/__metadata__.py b/awswrangler/__metadata__.py index 8ec6474ad..4dd4a4921 100644 --- a/awswrangler/__metadata__.py +++ b/awswrangler/__metadata__.py @@ -7,5 +7,5 @@ __title__ = "awswrangler" __description__ = "Pandas on AWS." -__version__ = "1.1.2" +__version__ = "1.2.0" __license__ = "Apache License 2.0" diff --git a/awswrangler/_utils.py b/awswrangler/_utils.py index b31efd803..e4a6a16dd 100644 --- a/awswrangler/_utils.py +++ b/awswrangler/_utils.py @@ -25,7 +25,7 @@ def ensure_session(session: Optional[boto3.Session] = None) -> boto3.Session: # set via boto3.setup_default_session() if boto3.DEFAULT_SESSION is not None: return boto3.DEFAULT_SESSION - return boto3.Session() + return boto3.Session() # pragma: no cover def client(service_name: str, session: Optional[boto3.Session] = None) -> boto3.client: diff --git a/docs/source/api.rst b/docs/source/api.rst index 9d1619f38..3578ff408 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -11,18 +11,20 @@ Amazon S3 .. autosummary:: :toctree: stubs + copy_objects delete_objects describe_objects does_object_exist get_bucket_region - list_objects list_directories + list_objects + merge_datasets read_csv read_fwf read_json read_parquet - read_parquet_table read_parquet_metadata + read_parquet_table size_objects store_parquet_metadata to_csv @@ -30,8 +32,6 @@ Amazon S3 to_parquet wait_objects_exist wait_objects_not_exist - copy_objects - merge_datasets AWS Glue Catalog ---------------- @@ -41,33 +41,33 @@ AWS Glue Catalog .. autosummary:: :toctree: stubs - add_parquet_partitions - create_parquet_table add_csv_partitions + add_parquet_partitions create_csv_table + create_parquet_table databases delete_table_if_exists does_table_exist + drop_duplicated_columns + extract_athena_types + get_columns_comments + get_csv_partitions get_databases + get_engine get_parquet_partitions - get_csv_partitions + get_table_description get_table_location + get_table_parameters get_table_types get_tables - search_tables - table - tables + overwrite_table_parameters sanitize_column_name sanitize_dataframe_columns_names sanitize_table_name - drop_duplicated_columns - get_engine - extract_athena_types - get_table_parameters - get_columns_comments - get_table_description + search_tables + table + tables upsert_table_parameters - overwrite_table_parameters Amazon Athena ------------- @@ -77,15 +77,15 @@ Amazon Athena .. autosummary:: :toctree: stubs + create_athena_bucket + get_query_columns_types + get_work_group read_sql_query read_sql_table repair_table start_query_execution stop_query_execution wait_query - create_athena_bucket - get_query_columns_types - get_work_group Databases (Redshift, PostgreSQL, MySQL) --------------------------------------- @@ -95,13 +95,13 @@ Databases (Redshift, PostgreSQL, MySQL) .. autosummary:: :toctree: stubs - to_sql - read_sql_query - read_sql_table + copy_files_to_redshift + copy_to_redshift get_engine get_redshift_temp_engine - copy_to_redshift - copy_files_to_redshift + read_sql_query + read_sql_table + to_sql unload_redshift unload_redshift_to_files write_redshift_copy_manifest @@ -114,16 +114,16 @@ EMR .. autosummary:: :toctree: stubs + build_spark_step + build_step create_cluster get_cluster_state - terminate_cluster - submit_step - submit_spark_step + get_step_state submit_ecr_credentials_refresh + submit_spark_step + submit_step submit_steps - build_step - build_spark_step - get_step_state + terminate_cluster CloudWatch Logs --------------- diff --git a/testing/test_awswrangler/test_metadata.py b/testing/test_awswrangler/test_metadata.py index f41b28641..89b2a8b0c 100644 --- a/testing/test_awswrangler/test_metadata.py +++ b/testing/test_awswrangler/test_metadata.py @@ -2,7 +2,7 @@ def test_metadata(): - assert wr.__version__ == "1.1.2" + assert wr.__version__ == "1.2.0" assert wr.__title__ == "awswrangler" assert wr.__description__ == "Pandas on AWS." assert wr.__license__ == "Apache License 2.0" From 2e2641b72eafdf2ed21d810a87dbb46eb81866a6 Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 19 May 2020 22:19:07 +0000 Subject: [PATCH 17/20] Add Schema Evolution tutorial --- tutorials/01 - Introduction.ipynb | 13 +- tutorials/02 - Sessions.ipynb | 58 +-- tutorials/03 - Amazon S3.ipynb | 18 +- tutorials/04 - Parquet Datasets.ipynb | 22 +- tutorials/14 - Schema Evolution.ipynb | 417 +++++++++++++++++++ tutorials/_static/glue_catalog_version_0.png | Bin 0 -> 265063 bytes tutorials/_static/glue_catalog_version_1.png | Bin 0 -> 279875 bytes 7 files changed, 470 insertions(+), 58 deletions(-) create mode 100644 tutorials/14 - Schema Evolution.ipynb create mode 100644 tutorials/_static/glue_catalog_version_0.png create mode 100644 tutorials/_static/glue_catalog_version_1.png diff --git a/tutorials/01 - Introduction.ipynb b/tutorials/01 - Introduction.ipynb index 78691fd02..c78baf660 100644 --- a/tutorials/01 - Introduction.ipynb +++ b/tutorials/01 - Introduction.ipynb @@ -69,16 +69,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'1.0.2'" + "'1.2.0'" ] }, - "execution_count": 2, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -88,6 +88,13 @@ "\n", "wr.__version__" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/tutorials/02 - Sessions.ipynb b/tutorials/02 - Sessions.ipynb index 07ace8f94..2ff88ad1a 100644 --- a/tutorials/02 - Sessions.ipynb +++ b/tutorials/02 - Sessions.ipynb @@ -90,38 +90,23 @@ }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Using a new custom Session" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "my_session = boto3.Session(region_name=\"us-east-2\")\n", - "\n", - "wr.s3.does_object_exist(\"s3://noaa-ghcn-pds/fake\", boto3_session=my_session)" - ], + "execution_count": 4, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, + }, "outputs": [ { "data": { @@ -142,17 +127,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_session = boto3.Session(region_name=\"us-east-2\")\n", + "\n", + "wr.s3.does_object_exist(\"s3://noaa-ghcn-pds/fake\", boto3_session=my_session)" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "conda_python3", "language": "python", - "name": "python3" + "name": "conda_python3" }, "language_info": { "codemirror_mode": { @@ -164,9 +164,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.10" + "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 4 -} \ No newline at end of file +} diff --git a/tutorials/03 - Amazon S3.ipynb b/tutorials/03 - Amazon S3.ipynb index 8fdad9a54..90eff872e 100644 --- a/tutorials/03 - Amazon S3.ipynb +++ b/tutorials/03 - Amazon S3.ipynb @@ -82,7 +82,7 @@ "name": "stdin", "output_type": "stream", "text": [ - " ··········································\n" + " ············\n" ] } ], @@ -109,25 +109,13 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'paths': ['s3://aws-data-wrangler-test-bucket-ql9ou148dw6r/csv/file2.csv'],\n", - " 'partitions_values': {}}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "path1 = f\"s3://{bucket}/csv/file1.csv\"\n", "path2 = f\"s3://{bucket}/csv/file2.csv\"\n", "\n", "wr.s3.to_csv(df1, path1, index=False)\n", - "wr.s3.to_csv(df2, path2, index=False)" + "wr.s3.to_csv(df2, path2, index=False);" ] }, { diff --git a/tutorials/04 - Parquet Datasets.ipynb b/tutorials/04 - Parquet Datasets.ipynb index 868cccf53..d9d44325d 100644 --- a/tutorials/04 - Parquet Datasets.ipynb +++ b/tutorials/04 - Parquet Datasets.ipynb @@ -50,7 +50,7 @@ "name": "stdin", "output_type": "stream", "text": [ - " ··········································\n" + " ············\n" ] } ], @@ -184,31 +184,31 @@ " \n", " \n", " 0\n", - " 3\n", - " bar\n", - " 2020-01-03\n", - " \n", - " \n", - " 1\n", " 1\n", " foo\n", " 2020-01-01\n", " \n", " \n", - " 2\n", + " 1\n", " 2\n", " boo\n", " 2020-01-02\n", " \n", + " \n", + " 2\n", + " 3\n", + " bar\n", + " 2020-01-03\n", + " \n", " \n", "\n", "" ], "text/plain": [ " id value date\n", - "0 3 bar 2020-01-03\n", - "1 1 foo 2020-01-01\n", - "2 2 boo 2020-01-02" + "0 1 foo 2020-01-01\n", + "1 2 boo 2020-01-02\n", + "2 3 bar 2020-01-03" ] }, "execution_count": 4, diff --git a/tutorials/14 - Schema Evolution.ipynb b/tutorials/14 - Schema Evolution.ipynb new file mode 100644 index 000000000..6dd01a633 --- /dev/null +++ b/tutorials/14 - Schema Evolution.ipynb @@ -0,0 +1,417 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![AWS Data Wrangler](_static/logo.png \"AWS Data Wrangler\")](https://github.com/awslabs/aws-data-wrangler)\n", + "\n", + "# 14 - Schema Evolution\n", + "\n", + "Wrangler support new **columns** on Parquet Dataset through:\n", + "\n", + "- [wr.s3.to_parquet()](https://aws-data-wrangler.readthedocs.io/en/latest/stubs/awswrangler.s3.to_parquet.html#awswrangler.s3.to_parquet)\n", + "- [wr.s3.store_parquet_metadata()](https://aws-data-wrangler.readthedocs.io/en/latest/stubs/awswrangler.s3.store_parquet_metadata.html#awswrangler.s3.store_parquet_metadata) i.e. \"Crawler\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from datetime import date\n", + "import awswrangler as wr\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Enter your bucket name:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + " ············\n" + ] + } + ], + "source": [ + "import getpass\n", + "bucket = getpass.getpass()\n", + "path = f\"s3://{bucket}/dataset/\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating the Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idvalue
01foo
12boo
\n", + "
" + ], + "text/plain": [ + " id value\n", + "0 1 foo\n", + "1 2 boo" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({\n", + " \"id\": [1, 2],\n", + " \"value\": [\"foo\", \"boo\"],\n", + "})\n", + "\n", + "wr.s3.to_parquet(\n", + " df=df,\n", + " path=path,\n", + " dataset=True,\n", + " mode=\"overwrite\",\n", + " database=\"aws_data_wrangler\",\n", + " table=\"my_table\"\n", + ")\n", + "\n", + "wr.s3.read_parquet(path, dataset=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Schema Version 0 on Glue Catalog (AWS Console)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Glue Console](_static/glue_catalog_version_0.png \"Glue Console\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Appending with NEW COLUMNS" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idvaluedateflag
03bar2020-01-03True
14<NA>2020-01-04False
21fooNone<NA>
32booNone<NA>
\n", + "
" + ], + "text/plain": [ + " id value date flag\n", + "0 3 bar 2020-01-03 True\n", + "1 4 2020-01-04 False\n", + "2 1 foo None \n", + "3 2 boo None " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({\n", + " \"id\": [3, 4],\n", + " \"value\": [\"bar\", None],\n", + " \"date\": [date(2020, 1, 3), date(2020, 1, 4)],\n", + " \"flag\": [True, False]\n", + "})\n", + "\n", + "wr.s3.to_parquet(\n", + " df=df,\n", + " path=path,\n", + " dataset=True,\n", + " mode=\"append\",\n", + " database=\"aws_data_wrangler\",\n", + " table=\"my_table\",\n", + " catalog_versioning=True # Optional\n", + ")\n", + "\n", + "wr.s3.read_parquet(path, dataset=True, validate_schema=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Schema Version 1 on Glue Catalog (AWS Console)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Glue Console](_static/glue_catalog_version_1.png \"Glue Console\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reading from Athena" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idvaluedateflag
03bar2020-01-03True
14<NA>2020-01-04False
21fooNone<NA>
32booNone<NA>
\n", + "
" + ], + "text/plain": [ + " id value date flag\n", + "0 3 bar 2020-01-03 True\n", + "1 4 2020-01-04 False\n", + "2 1 foo None \n", + "3 2 boo None " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wr.athena.read_sql_table(table=\"my_table\", database=\"aws_data_wrangler\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cleaning Up" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wr.s3.delete_objects(path)\n", + "wr.catalog.delete_table_if_exists(table=\"my_table\", database=\"aws_data_wrangler\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "conda_python3", + "language": "python", + "name": "conda_python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tutorials/_static/glue_catalog_version_0.png b/tutorials/_static/glue_catalog_version_0.png new file mode 100644 index 0000000000000000000000000000000000000000..51a81ee76f4002fc49964888662c10a511a0abcc GIT binary patch literal 265063 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�y2_zQo# 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

&-#IG&#+Of@LWxu@dUs<;X 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%0D&gy7r0uclig5wO-mU`Ar9Q?c7 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 Date: Tue, 19 May 2020 19:35:10 -0300 Subject: [PATCH 18/20] Update docs --- README.md | 10 ++-------- docs/source/api.rst | 2 -- docs/source/index.rst | 3 +-- docs/source/install.rst | 2 -- docs/source/what.rst | 2 -- requirements-dev.txt | 4 ++-- 6 files changed, 5 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 07ec7a54b..16e17b916 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,6 @@ # AWS Data Wrangler *Pandas on AWS* ---- - -**NOTE** - -Due the new major version `1.0.0` with breaking changes, please make sure that all your old projects has dependencies frozen on the desired version (e.g. `pip install awswrangler==0.3.2`). You can always read the legacy docs [here](https://aws-data-wrangler.readthedocs.io/en/legacy/). - ---- - ![AWS Data Wrangler](docs/source/_static/logo2.png?raw=true "AWS Data Wrangler") [![Release](https://img.shields.io/badge/release-1.2.0-brightgreen.svg)](https://pypi.org/project/awswrangler/) @@ -84,6 +76,7 @@ df = wr.db.read_sql_query("SELECT * FROM external_schema.my_table", con=engine) - [11 - CSV Datasets](https://github.com/awslabs/aws-data-wrangler/blob/master/tutorials/11%20-%20CSV%20Datasets.ipynb) - [12 - CSV Crawler](https://github.com/awslabs/aws-data-wrangler/blob/master/tutorials/12%20-%20CSV%20Crawler.ipynb) - [13 - Merging Datasets on S3](https://github.com/awslabs/aws-data-wrangler/blob/master/tutorials/13%20-%20Merging%20Datasets%20on%20S3.ipynb) + - [14 - Schema Evolution](https://github.com/awslabs/aws-data-wrangler/blob/master/tutorials/14%20-%20Schema%20Evolution.ipynb) - [15 - EMR](https://github.com/awslabs/aws-data-wrangler/blob/master/tutorials/15%20-%20EMR.ipynb) - [16 - EMR & Docker](https://github.com/awslabs/aws-data-wrangler/blob/master/tutorials/16%20-%20EMR%20%26%20Docker.ipynb) - [**API Reference**](https://aws-data-wrangler.readthedocs.io/en/latest/api.html) @@ -95,3 +88,4 @@ df = wr.db.read_sql_query("SELECT * FROM external_schema.my_table", con=engine) - [CloudWatch Logs](https://aws-data-wrangler.readthedocs.io/en/latest/api.html#cloudwatch-logs) - [**License**](https://github.com/awslabs/aws-data-wrangler/blob/master/LICENSE) - [**Contributing**](https://github.com/awslabs/aws-data-wrangler/blob/master/CONTRIBUTING.md) +- [**Legacy Docs** (pre-1.0.0)](https://aws-data-wrangler.readthedocs.io/en/legacy/) diff --git a/docs/source/api.rst b/docs/source/api.rst index 3578ff408..5cd8e9e3c 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -1,5 +1,3 @@ -.. note:: Due the new major version 1.0.0 with breaking changes, please make sure that all your old projects has dependencies frozen on the desired version (e.g. `pip install awswrangler==0.3.2`). You can always check the legacy docs `here `_. - API Reference ============= diff --git a/docs/source/index.rst b/docs/source/index.rst index a20e727be..6c0380007 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,5 +1,3 @@ -.. note:: Due the new major version 1.0.0 with breaking changes, please make sure that all your old projects has dependencies frozen on the desired version (e.g. `pip install awswrangler==0.3.2`). You can always check the legacy docs `here `_. - Quick Start ----------- @@ -45,3 +43,4 @@ Read The Docs api License Contributing + Legacy Docs (pre-1.0.0) diff --git a/docs/source/install.rst b/docs/source/install.rst index 8b758f842..7cf8ce973 100644 --- a/docs/source/install.rst +++ b/docs/source/install.rst @@ -1,5 +1,3 @@ -.. note:: Due the new major version 1.0.0 with breaking changes, please make sure that all your old projects has dependencies frozen on the desired version (e.g. `pip install awswrangler==0.3.2`). You can always check the legacy docs `here `_. - Install ======= diff --git a/docs/source/what.rst b/docs/source/what.rst index 52d7d8194..0a169b74d 100644 --- a/docs/source/what.rst +++ b/docs/source/what.rst @@ -1,5 +1,3 @@ -.. note:: Due the new major version 1.0.0 with breaking changes, please make sure that all your old projects has dependencies frozen on the desired version (e.g. `pip install awswrangler==0.3.2`). You can always check the legacy docs `here `_. - What is AWS Data Wrangler? ========================== diff --git a/requirements-dev.txt b/requirements-dev.txt index 30cb6182b..27e89bc97 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -11,8 +11,8 @@ pytest~=5.4.2 pytest-cov~=2.8.1 pytest-xdist~=1.32.0 pytest-timeout~=1.3.4 -scikit-learn~=0.23.0 -cfn-lint~=0.31.1 +scikit-learn~=0.23.1 +cfn-lint~=0.32.0 cfn-flip~=1.2.3 twine~=3.1.1 wheel~=0.34.2 From 585ce8e5ed4b51ed7a426653ac764a6958bfb17c Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 19 May 2020 21:35:00 -0300 Subject: [PATCH 19/20] Update tests timeout to 15 min. --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 05764a50f..288b563dc 100644 --- a/tox.ini +++ b/tox.ini @@ -8,7 +8,7 @@ deps = pytest-timeout moto commands = - pytest --timeout=600 -n 8 testing/test_awswrangler + pytest --timeout=900 -n 8 testing/test_awswrangler [testenv:py36] deps = From c9ec52c684dc0e11b86dbaeb1893f2c31d9d8cbd Mon Sep 17 00:00:00 2001 From: igorborgest Date: Tue, 19 May 2020 23:06:34 -0300 Subject: [PATCH 20/20] Bumping Apache Arrow version on lambda layer. --- building/lambda/build-lambda-layer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/building/lambda/build-lambda-layer.sh b/building/lambda/build-lambda-layer.sh index c9b642fd0..7cb7ad06b 100644 --- a/building/lambda/build-lambda-layer.sh +++ b/building/lambda/build-lambda-layer.sh @@ -14,7 +14,7 @@ export ARROW_HOME=$(pwd)/dist export LD_LIBRARY_PATH=$(pwd)/dist/lib:$LD_LIBRARY_PATH git clone \ - --branch apache-arrow-0.17.0 \ + --branch apache-arrow-0.17.1 \ --single-branch \ https://github.com/apache/arrow.git