我使用sqoop将表从Postgres导入到hdfs。我的表有uuid字段作为主键,我的命令sqoop如下:
sqoop import --connect 'jdbc:postgresql://localhost:5432/mydb' --username postgreuser --password 123456abcA --driver org.postgresql.Driver --table users --map-column-java id=String --target-dir /hdfs/postgre/users --as-avrodatafile --compress -m 2
但我得到了错误:
Import failed: java.io.IOException: org.postgresql.util.PSQLException: ERROR: function min(uuid) does not exist
我尝试执行sql命令:从用户中选择最小(id)
并得到相同的错误。我该如何解决它?我使用后记 9.4、哈多普 2.9.0 和 sqoop 1.4.7
我发现@robin萨利赫和@bodgan市场提供的答案是一个很好的起点,但最终是不正确的。这是一个更适合我的解决方案:
CREATE FUNCTION min_uuid(uuid, uuid)
RETURNS uuid AS $$
BEGIN
-- if they're both null, return null
IF $2 IS NULL AND $1 IS NULL THEN
RETURN NULL ;
END IF;
-- if just 1 is null, return the other
IF $2 IS NULL THEN
RETURN $1;
END IF ;
IF $1 IS NULL THEN
RETURN $2;
END IF;
-- neither are null, return the smaller one
IF $1 > $2 THEN
RETURN $2;
END IF;
RETURN $1;
END;
$$ LANGUAGE plpgsql;
create aggregate min(uuid) (
sfunc = min_uuid,
stype = uuid,
combinefunc = min_uuid,
parallel = safe,
sortop = operator (<)
);
要了解更多细节,请看我的文章如何选择左外连接的最小UUID?
Postgres没有min/max uuid的内置函数,但是您可以使用以下代码创建自己的函数:
CREATE OR REPLACE FUNCTION min(uuid, uuid)
RETURNS uuid AS $$
BEGIN
IF $2 IS NULL OR $1 > $2 THEN
RETURN $2;
END IF;
RETURN $1;
END;
$$ LANGUAGE plpgsql;
CREATE AGGREGATE min(uuid)
(
sfunc = min,
stype = uuid
);
我想相信@robin-salh的回答,我已经使用它和min for int的实现来构建以下代码:
CREATE OR REPLACE FUNCTION min(uuid, uuid)
RETURNS uuid AS $$
BEGIN
IF $2 IS NULL OR $1 > $2 THEN
RETURN $2;
END IF;
RETURN $1;
END;
$$ LANGUAGE plpgsql;
create aggregate min(uuid) (
sfunc = min,
stype = uuid,
combinefunc = min,
parallel = safe,
sortop = operator (<)
);
它几乎相同,但利用了B树索引,因此从tbl
选择min(id)只需几毫秒。
P.S.我不是pgsql专家,也许我的代码有点错误,在生产中使用之前要仔细检查,但我希望它能正确使用索引和并行执行。我只是根据示例代码编写的,而不是深入研究PG中聚合背后的理论。
需要您的帮助,我不明白为什么会出现以下错误,我不是专业的postgresql开发人员。。 正如你可以看到创建的函数,那么为什么函数不存在? 错误:函数logintry(未知,未知,带时区的时间戳,整数)不存在第1行:选择logintry('Jon.Jones88@gmail.com','_@kjhfdb987',...^HINT:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。SQL
MariaDB 函数用于检索表达式的最小值。 语法: 数据准备 在数据库中创建一个表,并插入一些数据。参考以下创建语句 - 1. MIN()函数与单表达式 示例: 查询表的最低分数。参考以下查询语句 - 执行上面查询语句,得到以下结果 - 2. Min()函数与GROUP BY子句 可以使用函数的子句来分组。 再插入一条重复的数据 - 当前数据库中的记录如下 - 示例: 执行上面查询语句,得到以下
MIN() 函数 MIN() 函数返回指定列的最小值。 SQL MIN() 语法SELECT MIN(column_name) FROM table_name; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面是选自 "Websites" 表的数据: +----+--------------+---------------------------+-------+------
Python3 数字 描述 min() 方法返回给定参数的最小值,参数可以为序列。 语法 以下是 min() 方法的语法: min( x, y, z, .... ) 参数 x -- 数值表达式。 y -- 数值表达式。 z -- 数值表达式。 返回值返回给定参数的最小值。 实例 以下展示了使用 min() 方法的实例: #!/usr/bin/python3 print ("min(80,
我能够通过一个PHP脚本用这些完全相同的凭证连接到< code>protomolecule数据库。如图所示,试图在PhpStorm中设置它失败了。 如果我将数据库更改为默认的数据库,它在PhpStom中连接得很好。我不明白为什么用户只能连接到而不是其他任何东西。 我尝试设置新用户和新数据库无济于事。 编辑:根据要求添加了下面的工作PHP脚本设置。
问题内容: 这个psql会话代码段应该是不言自明的: 问题是Postgres函数不喜欢字段类型,但是根据文档,此调用应该是完全正确的吗? 问题答案: 使用显式类型转换: 或更改列输入。 为什么? Postgres允许函数重载。函数签名是由它们的(可选的,由 模式 限定的) 名称 加上 输入参数类型 (的列表)定义的。期望类型的2参数形式 作为第一个参数: 如果没有现有函数 完全 匹配,则“函数类型