def METHOD_NAME(
    column_type_mapping: Dict,
    columns: List[str],
    full_table_name: str,
    key_properties: List[str],
    schema: Dict,
    unique_constraints: List[str] = None,
    use_lowercase: bool = True,
) -> str:
    columns_and_types = []
    column_properties = schema['properties']
    for col in columns:
        column_name = clean_column_name(col, lower_case=use_lowercase)
        column_type = column_type_mapping[col]['type_converted']
        if COLUMN_TYPE_INTEGER == column_type_mapping[col]['type']:
            column_type = 'INTEGER'
        column_props = []
        if COLUMN_TYPE_NULL not in column_properties.get(col).get('type', []):
            column_props.append('NOT NULL')
        col_statement = f'{column_name} {column_type}'
        if len(column_props) >= 1:
            col_statement = f"{col_statement} {' '.join(column_props)}"
        columns_and_types.append(col_statement)
    if unique_constraints:
        unique_constraints = [clean_column_name(col, lower_case=use_lowercase)
                              for col in unique_constraints]
        index_name = '_'.join([
            clean_column_name(full_table_name, lower_case=use_lowercase),
        ] + unique_constraints)
        index_name = f'unique{index_name}'[:64]
        columns_and_types.append(f"CONSTRAINT {index_name} Unique({', '.join(unique_constraints)})")
    if key_properties and len(key_properties) >= 1:
        col = clean_column_name(key_properties[0], lower_case=use_lowercase)
        columns_and_types.append(f'PRIMARY KEY ({col})')
    return f"CREATE TABLE {full_table_name} ({', '.join(columns_and_types)})"