csv - 使用 COPY TO 将引用的数字从 CSV 加载到雪花表中我在将 CSV 数据加载到雪花表时遇到问题。字段用双引号括起来,因此将它们导入表中存在问题。
我知道 COPY TO 具有 CSV 特定选项 FIELD_OPTIONALLY_ENCLOSED_BY = '"' 但它根本不起作用。
以下是一些表定义和复制命令的图片:
CREATE TABLE ...
(
GamePlayId NUMBER NOT
问题描述
我在将 CSV 数据加载到雪花表时遇到问题。字段用双引号括起来,因此将它们导入表中存在问题。
我知道 COPY TO 具有 CSV 特定选项 FIELD_OPTIONALLY_ENCLOSED_BY = '"' 但它根本不起作用。
以下是一些表定义和复制命令的图片:
CREATE TABLE ...
(
GamePlayId NUMBER NOT NULL,
etc...
....);
COPY INTO ...
FROM ...csv.gz'
FILE_FORMAT = (TYPE = CSV
STRIP_NULL_VALUES = TRUE
FIELD_DELIMITER = ','
SKIP_HEADER = 1
error_on_column_count_mismatch=false
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
)
ON_ERROR = "ABORT_STATEMENT"
;
CSV 文件如下所示:
"3922000","14733370","57256","2","3","2","2","2019-05-23 14:14:44",",00000000",",00000000",",00000000",",00000000","1000,00000000","1000,00000000","1317,50400000","1166,50000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000"
我收到一个错误
'''Numeric value '"3922000"' is not recognized '''
我很确定这是因为当雪花正在读取“”标记时,NUMBER 值被解释为字符串,但是因为我使用
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
它甚至不应该在那里......有没有人对此有一些解决方案?
定义实体方法以渲染为树枝块
我想以更加面向对象的方式编写我的视图层,以利用面向对象模型的一些好处。我想作为一个开始为我的模型定义一种行为,以便能够指定一种由 Twig 呈现的方式。
我看到了这个视频,很好地反映了我的想法。
例如,假设我有一个用户模型,我想在我网站的多个位置显示。我想定义一个“Twigable”接口,它的方法告诉 twig 如何渲染这个模型。
我将如何以可扩展的方式实现这一点?
编辑:我做了一点实验。现在没有太多抽象,包括在这里可能指向我所追求的。
我有我的模型 User.php:
<?php
namespace App\Model;
use Twig\Environment;
class User
{
private $name;
private $age;
private $city;
public function __construct(string $name, int $age, string $city) {
$this->name = $name;
$this->age = $age;
$this->city = $city;
}
public function render(Environment $twig)
{
return $twig->load('model/user.html.twig')->render(['name' => $this->name]);
}
}
然后,我从我的模板添加到我的配置中,以将 twig 环境传递给 render 方法:
twig:
globals:
twig_env: '@Twig\Environment'
我将 User 类的一个实例传递给模板:
// ... inside the controller action
$user = new \App\Model\User('John Doe', 40, 'London');
return $this->render('index.html.twig', [
'user' => $user,
]);
// ...
最后,在模板中:
{# ... inside index.html.twig #}
{% block body %}
{{ user.render(twig_env) }}
{% endblock %}
{# ... #}
现在,twig 模板不再需要“知道”我的 User 类的样子,只需知道它存在并且可以显示。
这是一个好主意吗?
解决方案
假设您的数字是欧洲格式的,
小数位,并且.
数千,阅读数字格式帮助,似乎 Snowflake 不支持将其作为输入。我会打开一个功能请求。
但是,如果您阅读 as 中的列,text
则使用REPLACE之类的
SELECT '100,1234'::text as A
,REPLACE(A,',','.') as B
,TRY_TO_DECIMAL(b, 20,10 ) as C;
给出:
A B C
100,1234 100.1234 100.1234000000
更安全的是首先剥离占位符
SELECT '1.100,1234'::text as A
,REPLACE(A,'.') as B
,REPLACE(B,',','.') as C
,TRY_TO_DECIMAL(C, 20,10 ) as D;
推荐阅读
- c# - 如何在 ASP.NET Core Razor 页面中使用查询构建 @Url.Page 链接
- django - Django 如何使用表单按钮传递 url 参数?
- javascript - 使用 forEach 迭代 NodeList 时,如何使用仅绑定而不是调用?
- javascript - 进入/退出未正确清理强制布局中弹出的节点/链接
- java - JVM 堆外内存地址会发生变化吗?
- ios - 为什么在 UIImagePNGRepresentation 之后图像大小会增加?
- javascript - 当对象已更新时,React 访问对象的属性会返回旧数据
- javascript - 如何仅在定义对象时才在JS中合并对象?
- angular - Angular - 向仪表板父模块添加侧边栏
- powershell - 为什么我收到“SessionOptions.SshHostKeyFingerprint 未设置”。即使我在脚本中有指纹
我在将 CSV 数据加载到雪花表时遇到问题。字段用双引号括起来,因此将它们导入表中存在问题。
我知道 COPY TO 具有 CSV 特定选项 FIELD_OPTIONALLY_ENCLOSED_BY = '"' 但它根本不起作用。
以下是一些表定义和复制命令的图片:
CREATE TABLE ...
(
GamePlayId NUMBER NOT
问题描述
我在将 CSV 数据加载到雪花表时遇到问题。字段用双引号括起来,因此将它们导入表中存在问题。
我知道 COPY TO 具有 CSV 特定选项 FIELD_OPTIONALLY_ENCLOSED_BY = '"' 但它根本不起作用。
以下是一些表定义和复制命令的图片:
CREATE TABLE ...
(
GamePlayId NUMBER NOT NULL,
etc...
....);
COPY INTO ...
FROM ...csv.gz'
FILE_FORMAT = (TYPE = CSV
STRIP_NULL_VALUES = TRUE
FIELD_DELIMITER = ','
SKIP_HEADER = 1
error_on_column_count_mismatch=false
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
)
ON_ERROR = "ABORT_STATEMENT"
;
CSV 文件如下所示:
"3922000","14733370","57256","2","3","2","2","2019-05-23 14:14:44",",00000000",",00000000",",00000000",",00000000","1000,00000000","1000,00000000","1317,50400000","1166,50000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000",",00000000"
我收到一个错误
'''Numeric value '"3922000"' is not recognized '''
我很确定这是因为当雪花正在读取“”标记时,NUMBER 值被解释为字符串,但是因为我使用
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
它甚至不应该在那里......有没有人对此有一些解决方案?
我想以更加面向对象的方式编写我的视图层,以利用面向对象模型的一些好处。我想作为一个开始为我的模型定义一种行为,以便能够指定一种由 Twig 呈现的方式。
我看到了这个视频,很好地反映了我的想法。
例如,假设我有一个用户模型,我想在我网站的多个位置显示。我想定义一个“Twigable”接口,它的方法告诉 twig 如何渲染这个模型。
我将如何以可扩展的方式实现这一点?
编辑:我做了一点实验。现在没有太多抽象,包括在这里可能指向我所追求的。
我有我的模型 User.php:
<?php
namespace App\Model;
use Twig\Environment;
class User
{
private $name;
private $age;
private $city;
public function __construct(string $name, int $age, string $city) {
$this->name = $name;
$this->age = $age;
$this->city = $city;
}
public function render(Environment $twig)
{
return $twig->load('model/user.html.twig')->render(['name' => $this->name]);
}
}
然后,我从我的模板添加到我的配置中,以将 twig 环境传递给 render 方法:
twig:
globals:
twig_env: '@Twig\Environment'
我将 User 类的一个实例传递给模板:
// ... inside the controller action
$user = new \App\Model\User('John Doe', 40, 'London');
return $this->render('index.html.twig', [
'user' => $user,
]);
// ...
最后,在模板中:
{# ... inside index.html.twig #}
{% block body %}
{{ user.render(twig_env) }}
{% endblock %}
{# ... #}
现在,twig 模板不再需要“知道”我的 User 类的样子,只需知道它存在并且可以显示。
这是一个好主意吗?
假设您的数字是欧洲格式的,
小数位,并且.
数千,阅读数字格式帮助,似乎 Snowflake 不支持将其作为输入。我会打开一个功能请求。
但是,如果您阅读 as 中的列,text
则使用REPLACE之类的
SELECT '100,1234'::text as A
,REPLACE(A,',','.') as B
,TRY_TO_DECIMAL(b, 20,10 ) as C;
给出:
A B C
100,1234 100.1234 100.1234000000
更安全的是首先剥离占位符
SELECT '1.100,1234'::text as A
,REPLACE(A,'.') as B
,REPLACE(B,',','.') as C
,TRY_TO_DECIMAL(C, 20,10 ) as D;