使用ClickHouse进行SQL动态列选择

用户行为分析-埋点实时数仓实践(附用户关联源码) 一、概述 埋点采集、用户行为分析、实时数仓、IdMapping 此文重点讲述埋点的数据模型、数据格式、数据实时采集、加工、存储及用户关联。关于用户行为分析的概念、意义以及埋点相关的东西此文不作赘述; 二、数据模型 业界比较流行的事件、用户模型;即: * who: 设备ID、登录ID * when: 事件发生时间、上报时间 * where: 设备环境、网络环境、业务环境等 * what: 事件标识、事件参数 我们的数据存储也只有events和users两张表 阅读详情

图片

本文字数:4073;估计阅读时间:11 分钟

作者:Mark Needham

审校:庄晓东(魏庄)

本文在公众号【ClickHouseInc】首发

在处理包含大量列的数据集时,我们通常希望在其中的一部分列上做聚合计算。

如果,不得不手工键入所有要操作的列,那就会相当的繁琐,所以我很高兴地了解到:ClickHouse具有允许动态列选择的功能。

图片

导入NYC出租车数据集

我们将使用NYC出租车数据集,特别是2023年1月的黄色出租车数据。我们将下载该月的Parquet文件,然后启动ClickHouse Local实例并将其导入:

./clickhouse local -m
CREATE TABLE trips ENGINE MergeTree 
ORDER BY (tpep_pickup_datetime) AS 
from file('yellow tripdata Jan 2023.parquet', Parquet)
select *
SETTINGS schema_inference_make_columns_nullable = 0;

我们可以运行以下查询查看表的模式:

DESCRIBE TABLE trips
SETTINGS describe_compact_output = 1;
┌─name──────────────────┬─type──────────┐
│ VendorID              │ Int64         │
│ tpep_pickup_datetime  │ DateTime64(6) │
│ tpep_dropoff_datetime │ DateTime64(6) │
│ passenger_count       │ Float64       │
│ trip_distance         │ Float64       │
│ RatecodeID            │ Float64       │
│ store_and_fwd_flag    │ String        │
│ PULocationID          │ Int64         │
│ DOLocationID          │ Int64         │
│ payment_type          │ Int64         │
│ fare_amount           │ Float64       │
│ extra                 │ Float64       │
│ mta_tax               │ Float64       │
│ tip_amount            │ Float64       │
│ tolls_amount          │ Float64       │
│ improvement_surcharge │ Float64       │
│ total_amount          │ Float64       │
│ congestion_surcharge  │ Float64       │
│ airport_fee           │ Float64       │
└───────────────────────┴───────────────┘

动态选择列

现在,假设我们只想使用包含_amount的列。我们不必逐一的键入这些列,而是可以使用COLUMNS子句返回与正则表达式匹配所需要的列。查询返回前10行金额列的查询如下:

FROM trips 
SELECT COLUMNS('.*_amount')
LIMIT 10;
┌─fare_amount─┬─tip_amount─┬─tolls_amount─┬─total_amount─┐
│           0 │          0 │            0 │            0 │
│         120 │          0 │            0 │        120.3 │
│          45 │       9.06 │            0 │        54.36 │
│          75 │      15.06 │            0 │        90.36 │
│          55 │      14.45 │            0 │        72.25 │
│         4.5 │          0 │            0 │         6.55 │
│          10 │          0 │            0 │         10.8 │
│         115 │          5 │            0 │        120.3 │
│          78 │      15.76 │            0 │        94.56 │
│        19.5 │          0 │            0 │        21.55 │
└─────────────┴────────────┴──────────────┴──────────────┘

假设我们还想返回包含字段fee或tax的列。我们可以更新正则表达式以包括这些列:

FROM trips
SELECT
  COLUMNS('.*_amount|fee|tax')
ORDER BY rand() 
LIMIT 3
FORMAT Vertical;
Row 1:
──────
fare_amount:  9.3
mta_tax:      0.5
tip_amount:   0
tolls_amount: 0
total_amount: 13.3
airport_fee:  0

Row 2:
──────
fare_amount:  10
mta_tax:      0.5
tip_amount:   2
tolls_amount: 0
total_amount: 16
airport_fee:  0

Row 3:
──────
fare_amount:  18.4
mta_tax:      0.5
tip_amount:   1
tolls_amount: 0
total_amount: 23.4
airport_fee:  0

对所有列应用函数

我们还可以使用APPLY函数在每列上应用函数。例如,如果我们想找到每列的最大值,我们可以运行以下查询:

FROM trips 
SELECT 
  COLUMNS('.*_amount|fee|tax')
  APPLY(max)
FORMAT Vertical;
Row 1:
──────
max(fare_amount):  1160.1
max(mta_tax):      53.16
max(tip_amount):   380.8
max(tolls_amount): 196.99
max(total_amount): 1169.4
max(airport_fee):  1.25

或者,也许我们想看到平均值:

FROM trips 
SELECT 
  COLUMNS('.*_amount|fee|tax')
  APPLY(avg)
FORMAT Vertical;
Row 1:
──────
avg(fare_amount):  18.36706861234277
avg(mta_tax):      0.48828997712900174
avg(tip_amount):   3.3679406710521764
avg(tolls_amount): 0.5184906575852216
avg(total_amount): 27.020383107155837
avg(airport_fee):  0.10489592293640923

这些值包含很多小数位,但幸运的是,我们可以通过链接函数来解决这个问题。在这种情况下,我们将应用avg函数,然后是round函数:

FROM trips 
SELECT 
  COLUMNS('.*_amount|fee|tax')
  APPLY(avg)
  APPLY(round)
FORMAT Vertical;
Row 1:
──────
round(avg(fare_amount)):  18
round(avg(mta_tax)):      0
round(avg(tip_amount)):   3
round(avg(tolls_amount)): 1
round(avg(total_amount)): 27
round(avg(airport_fee)):  0

但是,这会将平均值四舍五入为整数。如果我们想将其四舍五入到2位小数,我们也可以这样做。除了接受函数外,APPLY函数还接受lambda,这使我们具有将round函数将平均值四舍五入到2位小数的灵活性:

FROM trips 
SELECT 
  COLUMNS('.*_amount|fee|tax')
  APPLY(avg)
  APPLY(col -> round(col, 2))
FORMAT Vertical;
Row 1:
──────
round(avg(fare_amount), 2):  18.37
round(avg(mta_tax), 2):      0.49
round(avg(tip_amount), 2):   3.37
round(avg(tolls_amount), 2): 0.52
round(avg(total_amount), 2): 27.02
round(avg(airport_fee), 2):  0.1

替换列

到目前为止一切顺利。但是,假设我们想调整一个值,同时将其他值保持不变。例如,也许我们想将总金额翻倍,并将MTA税除以1.1。我们可以使用REPLACE子句来实现此目的,该子句将替换一个列,同时将其他列保持不变。

FROM trips 
SELECT 
  COLUMNS('.*_amount|fee|tax')
  REPLACE(
    total_amount*2 AS total_amount,
    mta_tax/1.1 AS mta_tax
  ) 
  APPLY(avg)
  APPLY(col -> round(col, 2))
FORMAT Vertical;
Row 1:
──────
round(avg(fare_amount), 2):               18.37
round(divide(avg(mta_tax), 1.1), 2):      0.44
round(avg(tip_amount), 2):                3.37
round(avg(tolls_amount), 2):              0.52
round(multiply(avg(total_amount), 2), 2): 54.04
round(avg(airport_fee), 2):               0.1

我们可以看到这两列都已被替换,而其他列与前一个查询中的相同。排除列

我们还可以选择使用EXCEPT子句排除一个字段。例如,要删除tolls_amount列,我们将编写以下查询:

FROM trips 
SELECT 
  COLUMNS('.*_amount|fee|tax') EXCEPT(tolls_amount)
  REPLACE(
    total_amount*2 AS total_amount,
    mta_tax/1.1 AS mta_tax
  ) 
  APPLY(avg)
  APPLY(col -> round(col, 2))
FORMAT Vertical;
Row 1:
──────
round(avg(fare_amount), 2):               18.37
round(divide(avg(mta_tax), 1.1), 2):      0.44
round(avg(tip_amount), 2):                3.37
round(multiply(avg(total_amount), 2), 2): 54.04
round(avg(airport_fee), 2):               0.1

现在已删除tolls_amount列,其他列保持不变。

总结一下

希望您已经看到,即使是一个没有太多列的数据集,ClickHouse的动态列选择功能也能在SQL查询中节省大量输入。

在您自己的数据上尝试这些查询,然后告诉我们您的使用体验!

图片

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

阿里SLS -> Flink -> ClickHouseSink 写入动态列 1.ClickHouseUtil 1.需求 需求:通过flink解析SLS中的JSON数据并以动态列的形式存入clickhouse中,方便事件的在线检索,开发一个Flink的clickhouseSink。其中实现动态列最关键的就是根据解析出来的字段完成对sql的拼接。 2.代码 1.ClickHouseUtil import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; pub 阅读详情

相关推荐

Clickhouse & Elasticsearch 选型对比

Clickhouse是俄罗斯搜索巨头Yandex开发的完全列式存储计算的分析型数据库。ClickHouse在这两年的OLAP领域中一直非常热门,国内互联网大厂都有大规模使用。Elasticsearch是一个近实时的分布式搜索分析引擎,它的底层存储完全构建在Lucene之上。简单来说是通过扩展Lucene的单机搜索能力,使其具有分布式的搜索和分析能力。今天很多用户在实际的业务场景中,常常面对ClickHouse和Elasticsearch技术选型的难题。

qq_35667076的博客 4506

ClickHouse列存储(十一)—— ClickHouse

此次学习只要是借ClickHouse存储结构引出整个数据库的概念、原理、设计。终得到以下总结:ClickHouse是标准的列存结构;存储设计是LSM-Tree架构;使用稀疏索引加速查询;每个列都有丰富的压缩算法和索引结构;基于列存设计的高效的数据处理逻辑。

qq_54353206的博客 2653

多维聚合中的数据变形:从SQL GROUP BY到语义建模

多维聚合是数据分析与机器学习特征工程的核心基础,其本质是在多个业务维度上对原始数据进行有逻辑的折叠、重组与升维。它远超传统SQL中GROUP BY或pivot_table的语法操作,关键在于理解维度的业务语义、聚合粒度的决策依据以及空值、稀疏性、时序窗口等现实约束。Data Manipulation in Multi-Dimensional Aggregation强调可解释性、可追溯性与业务对齐,支撑报表下钻、A/B测试分层、用户行为宽表构建等高频场景。本文聚焦多维聚合中真实落地的数据变形方法论,涵盖动态透

dglf54292的博客 428

刚开始接触ClickHouse?12个最容易犯的错误以及避坑方法

有些问题仅仅是由于配置错误或更常见的是对ClickHouse行为和适当的功能使用的误解。

ClickHouseDB的博客 2131

多维聚合实战:从维度建模到OLAP查询优化

多维聚合是现代数据分析的核心能力,本质是构建可切片、可钻取、可动态组合的高维数据空间。其技术原理依赖维度建模(事实表+维度表)实现存储压缩、层级支持与语义一致;关键价值在于支撑实时交互式分析,显著提升BI响应速度与决策敏捷性。典型应用场景包括电商销售归因、金融风控多维下钻、SaaS产品行为分析等。本文聚焦真实工程落地,深入解析GROUPING SETS、PREWHERE优化、稀疏立方体设计及ClickHouse高性能实践,覆盖SQL工程师、Python分析师与数仓建设者共同关注的多维聚合、维度建模两大核心热

weixin_30634661的博客 498

多维聚合操纵:用GROUPING SETS与窗口函数重构OLAP计算范式

多维聚合是现代数据分析的核心能力,其本质是在基础分组结果之上进行跨维度的二次计算与结构变形。传统GROUP BY仅支持单一粒度聚合,难以应对上卷、下钻、切片等动态分析需求,易引发维度爆炸与数据不一致。基于GROUPING SETS的声明式组合与窗口函数的维度内导航,构成高效、可控、内存友好的多维操纵范式,显著提升ClickHouse、Doris等MPP引擎的OLAP查询性能与工程可维护性。本文聚焦多维聚合操纵(Multi-Dimensional Aggregation、Data Manipulation)在

weixin_33884611的博客 348

关于ClickHouse的表引擎和SQL操作

在 ClickHouse 中创建表的 SQL 语句与 MySQL 类似,但是需要指定引擎类型,例如,使用 MergeTree 引擎存储数据:

m0_69097184的博客 927

多维聚合实战:从SQL GROUP BY到OLAP立方体的工程化落地

多维聚合是现代数据分析的核心能力,本质是基于维度建模对事实数据进行可交互、可钻取的分组聚合操作。它超越传统SQL中单一GROUP BY的静态切片局限,依托OLAP立方体思想,将时间、地域、产品等维度与销售额、用户数等度量解耦,实现动态切片、下钻与跨维度对比。技术价值在于支撑自助式BI、降低分析门槛、提升查询性能,并为特征工程和预测分析提供结构化基础。典型应用场景包括销售归因分析、客户健康度监控、留存率交叉计算及预算执行追踪。本文聚焦多维聚合在真实工程中的落地路径,涵盖GROUPING SETS/CUBE语法

weixin_30555515的博客 486

ClickHouse-Grafana插件高级功能揭秘:Ad-hoc过滤器、注解和警报配置实战

想要充分利用ClickHouse的强大数据分析能力吗?🤔 Altinity ClickHouse Grafana数据源插件提供了三个关键高级功能:Ad-hoc过滤器、注解和警报系统,让您的监控和数据分析工作流更加智能高效。本文将为您详细介绍这些功能的配置和使用技巧,帮助您快速掌握ClickHouse-Grafana插件的核心价值。 ## 为什么选择ClickHouse-Grafana插件?

gitblog_00838的博客 289

【BigWorld 游戏服务器引擎】Cell 架构设计介绍,及Java实现方案的探索

横向扩展(Scalability):通过动态增减CellApp和BaseApp的数量,可以轻松应对玩家人数的变化。世界可以做得非常大,只需增加更多的 Cell。负载分离(Load Separation):将不同性质的负载分离,避免了单一进程瓶颈。CPU 密集型的实时计算(CellApp)和 I/O 密集型的数据操作(BaseApp)互不影响。高效的视野管理(AOI):每个 Cell 只关心自己区域内和边界上的实体,大大降低了计算复杂度。容错性:某个CellApp。

代码时光 1203

从零构建腾讯滑块验证码破解引擎:逆向工程与实战对抗

本文深入解析腾讯滑块验证码(原天御验证码)的防护机制,包括环境感知层、行为分析层和验证决策层的核心技术。通过JSVMP虚拟机保护、轨迹验证算法和动态加密体系,腾讯验证码实现了高效的人机识别。文章还提供了安全研究实践指南,涵盖环境模拟和验证码识别方案,并探讨了防御对抗的演进趋势与合规研究建议。

rl6adventurer的博客 827

ClickHouse SELECT查询深度解析

ClickHouse SELECT查询深度解析 【免费下载链接】ClickHouse ClickHouse® 是一个免费的大数据分析型数据库管理系统。 项目地址: https://gitcode.com/GitHub_Trendi...

gitblog_00343的博客 502

AutoLisp文件(.lsp)从编写到加载运行:一份给CAD新手的避坑指南

本文为CAD新手提供了一份AutoLisp文件(.lsp)从编写到加载运行的完整指南,涵盖编写环境配置、文件加载流程、调试技巧及工程化实践建议。通过详细的步骤和常见错误解决方案,帮助用户避免常见陷阱,提升AutoLisp脚本的开发效率和应用效果。

weixin_29228203的博客 890

海量数据存储与分析:HBase、ClickHouse、Doris三款数据库对比

混合架构(如HBase+Doris)可兼顾实时与分析需求,建议根据业务模块拆分使用。场景:既有实时交易记录,又需历史数据分析。交互式查询+实时更新。

我的博客 1841

ABB机器人与西门子PLC、工业相机联合实现无序抓取的完整调试方案

将此方案导入系统后,逐步执行调试,确保各环节信号正常触发,即可实现高效无序抓取!

CHUXUEZHE8210的博客 1991

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1782

clickhouse和cassandra数据库介绍

在大数据时代,不同的数据库针对不同场景有着各自的优势。ClickHouse 和 Apache Cassandra 分别代表了 OLAP 分析型数据库和高并发写入的 NoSQL 数据库。下面将详细介绍这两者的基本特性、主要优势与劣势,并通过对比表展示两者的关键区别。类型:开源的列式存储数据库,专为在线分析处理(OLAP)设计。开发者:由俄罗斯搜索引擎公司 Yandex 开发,并开源。核心目标:极速处理海量数据的聚合、过滤和分析查询,适合大规模数据分析场景。类型。

longgelaile的博客 943

OpenClaw 多代理协同工作模式配置指南

OpenClaw 采用。

形上得其象,形下合于数;阴阳自济,玄理自明。 1万+

从ClickHouse迁移到StarRocks:我们团队踩过的坑和性能提升实战

本文详细记录了从ClickHouse迁移到StarRocks的全过程,包括架构对比、数据模型重构、ETL改造和性能优化。通过实战案例展示了StarRocks在多表JOIN查询、高并发处理和数据更新延迟等方面的显著优势,帮助团队提升查询性能并降低资源消耗。

weixin_33701294的博客 367

“反激电源”是AC/DC隔离电源还是DC/DC隔离电源?

所以在一些场景,我们的输入电压是一个DC,但是我们仍然需要隔离电源的需求,我们就会只采用图9.2的右半部分。在这个场景下“反激电源”是DC/DC。所以此AC/DC的本质是将AC变成高压的DC之后,用带隔离变压器的反激式开关电源产生一个隔离的、稳定的直流电压。一般在讲述各种电源的拓扑的文章和书籍都是在讲述AC/DC的电源拓扑分类的时候,讲述Flyback。反激式开关电源是指使用反激高频变压器隔离输入输出回路的开关电源,反激式隔离变压器开关电源重点表述的是开关电源包含变压器的拓扑结构。

qq_43416206的博客 1290

从入门到精通:Cursor使用全攻略

Cursor是一款基于VSCode深度定制的AI编程工具,由Anysphere公司开发。它将AI技术与代码开发深度融合,能够理解自然语言指令并生成高质量代码,支持代码补全、跨文件上下文理解等功能。本文详细介绍了Cursor的安装设置、界面导航、基本操作和Composer模式等核心功能,并提供了高效提示词写作技巧和实际应用案例(如浏览器插件开发、复杂表单组件构建等)。文章还总结了使用注意事项和常见问题解决方案,展望了AI编程工具的发展前景。Cursor通过智能代码生成和项目理解能力,显著提升了开发效率,适合各

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 6456

分布式数据库

数据按列族(Column Family)存储,适合稀疏数据。

weixin_61006262的博客 1121

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

多维聚合中的数据变形:立方体操作与性能优化实战

多维聚合不是简单GROUP BY,而是基于超立方体模型的数据变形操作,其核心在于维度层级、度量计算与坐标映射的协同重排。理解Roll-up、Drill-down、Slice、Dice等原语的物理开销,能避免SQL模拟带来的计算冗余和内存爆炸。在高基数维度(如user_id、SKU)和复杂层级(年→季度→月)场景下,传统方法易触发OOM或查询超时;而通过维度代理键建模、物化视图精准狙击、ClickHouse向量化执行及SummingMergeTree引擎优化,可实现千万级事实表上的亚秒级响应。本文聚焦OLAP

weixin_34187862的博客 394

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据科学家真正在用的SQL实战思维:稳准狠挖业务数字

SQL不仅是查询语言,更是数据科学落地的核心工程能力。从基础SELECT到复杂归因分析,其本质是将模糊业务需求转化为可验证、可审计、可复现的数据结论。关键在于理解数据质量陷阱(如时间戳乱序、NULL值干扰、ID漂移)、掌握生产级优化策略(如分区裁剪、物化视图、BITMAP索引),并以业务动线组织分析逻辑——而非语法堆砌。本文聚焦真实场景中的高频痛点:日志清洗、RFM用户分群、漏斗归因、同比环比加速,所有方案均经电商、SaaS、本地生活等千万级数据验证,强调‘每行SQL自带答辩能力’。特别融入‘时间校准’与‘

weixin_30897233的博客 401

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

多维聚合实战:Slice、Dice、Pivot与Drill-down动态数据折叠术

多维聚合是现代数据分析的核心能力,本质是将扁平化记录建模为可交互的立方体结构,通过维度坐标系的动态变换实现灵活分析。其技术原理围绕切片(Slice)、切块(Dice)、旋转(Pivot)、钻取(Drill-down)四大原子操作展开,依赖维度层次、稀疏处理、预聚合与元数据驱动等关键技术支撑。相比传统SQL GROUP BY和Excel透视表,多维聚合能统一处理跨路径下钻、多条件组合过滤、实时口径注入等复杂场景,显著提升BI响应速度与业务适配性。在零售、金融、SaaS等高频分析领域,Multi-Dimensi

weixin_30751947的博客 468

又来一个挑战 ElasticSearch 的,初识 SigLens

Elastic Stack 在日志领域具备无与伦比的地位,各类新兴的开源项目都声称比 Elastic 更节省资源,同时检索速度也不慢,比如 ClickHouse、Loki、OpenObserve、VMLogs,今天我们来看看另一个项目:SigLens。

n9ecommunity的博客 1164
上一篇: ClickHouse 24.1 版本发布说明
下一篇: 如何执行混合查询?
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值