UDF generate_person 在Apache Superset里的动图效果
探索DuckDB:使用标量 Python UDF 快速扩展 DuckDB 的功能 提到了DuckDB 中使用Faker 库生成标量函数,该函数返回随机生成的日期。今天我们来个进阶版本。
Faker 简介
Faker 是什么?
-
• Faker 是一个 Python 包,可以生成虚假数据。
-
• Faker 可以生成各种类型的数据,包括姓名、地址、电话号码、电子邮件地址、公司名称、产品名称、价格等。
-
• Faker 可以生成模拟真实世界的数据,也可以生成完全随机的数据。
Faker 的主要功能:
-
• 💌 地点 – 生成看起来有效的地址、邮政编码、街道名称、州和国家!
-
• ⏰ 基于时间的数据 – 过去、现在、未来、最近、即将发生……随时随地!
-
• 🌏 本地化 – 选择一个语言环境来生成看起来逼真的姓名、地址和电话号码。
-
• 💸 财务 – 创建存根帐户详细信息、交易和加密地址。
-
• 👠 产品 – 生成价格、产品名称、形容词和说明。
-
• 🧍 姓名 – 生成具有完整在线和离线身份的虚拟人。
-
• 🔢 数字 – 当然,我们还可以生成随机数字和字符串。
注意: Faker 尝试生成真实数据,而不是明显的虚假数据。生成的姓名、地址、电子邮件、电话号码和/或其他数据可能是巧合的有效信息。请不要从您的测试设置向他们发送任何消息/电话。
Faker的主要用途?
-
• 生成测试数据: Faker 可用于生成大量测试数据,用于软件开发和测试。这可以帮助开发人员快速创建大量数据,以测试其应用程序的功能和性能。
-
• 模拟真实数据: Faker 可以生成模拟真实数据的测试数据,这可以帮助开发人员测试其应用程序在现实世界中的行为方式。例如,Faker 可以生成模拟用户数据、产品数据和订单数据,以测试电子商务应用程序的功能和性能。
-
• 创建匿名数据: Faker 可以生成匿名数据,这可以帮助开发人员保护用户隐私。例如,Faker 可以生成模拟用户数据,但不包括用户的姓名、电子邮件地址或其他个人信息。这可以帮助开发人员测试其应用程序的功能和性能,同时保护用户隐私。
-
• 提高开发效率: Faker 可以帮助开发人员提高开发效率。通过使用 Faker,开发人员可以快速创建大量测试数据,而无需手动输入数据。这可以节省开发人员的时间,并让他们专注于开发应用程序的功能和性能。
-
• 提高测试覆盖率: Faker 可以帮助开发人员提高测试覆盖率。通过使用 Faker,开发人员可以生成大量测试数据,以覆盖应用程序的不同场景和情况。这可以帮助开发人员发现应用程序中的错误和缺陷,并提高应用程序的质量。
如何安装和使用 Faker?
-
1. 安装 Faker:
pip install faker
-
1. 导入 Faker:
import faker
-
1. 创建 Faker 实例:
fake = faker.Faker()
-
1. 使用 Faker 生成数据:
fake.name() # 生成一个姓名
fake.address() # 生成一个地址
fake.phone_number() # 生成一个电话号码
fake.email() # 生成一个电子邮件地址
fake.company() # 生成一个公司名称
fake.product_name() # 生成一个产品名称
fake.price() # 生成一个价格
Faker 还提供了许多其他方法来生成不同类型的数据。有关更多信息,请参阅 Faker 的官方文档。
生成海量”真实”模拟数据
核心函数
import faker
fake = faker.Faker('en_US')
def generate_person(seed):
person = {
'name': fake.name(),
'city': fake.city(),
'state': fake.state(),
'zip_code': fake.zipcode(),
'country': fake.country(),
'email': fake.email(),
'job': fake.job(),
'company': fake.company(),
'ssn': fake.ssn(),
'birthdate': fake.date_of_birth(),
'phone_number': fake.phone_number()
}
return person
创建UDF
import duckdb
con.create_function(
'generate_person',
generate_person,
['double'],
duckdb.struct_type({
'name': 'VARCHAR',
'city': 'VARCHAR',
'state': 'VARCHAR',
'zip_code': 'VARCHAR',
'country': 'VARCHAR',
'email': 'VARCHAR',
'job': 'VARCHAR',
'company': 'VARCHAR',
'ssn': 'VARCHAR',
'birthdate': 'DATE',
'phone_number': 'VARCHAR'
})
)
生成海量数据
con.sql("""
CREATE OR REPLACE TABLE people AS
SELECT person.* FROM (
SELECT generate_person(random()) AS person
FROM generate_series(1,10000)
)
""")
参考:
https://www.markhneedham.com/blog/2023/06/02/duckdb-dummy-data-user-defined-functions/
原文始发于微信公众号(alitrack):一句 SQL生成海量超真实模拟数据
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/219712.html