- Kettle发送邮件功能如何配置以实现自动化?
DengHua2203
邮件群发服务器邮件营销邮件接口Kettle发送邮件API接口触发式邮件
kettle发送邮件如何设置?Kettle配置发送邮件的方法?Kettle发送邮件功能能够帮助用户在数据处理过程中自动发送电子邮件,极大地提高了工作效率。AokSend将详细介绍如何配置Kettle发送邮件功能,以实现自动化操作。Kettle发送邮件:设置对象需要在Kettle中明确指定邮件的收件人和发件人地址。这样,当Kettle发送邮件时,系统就能准确无误地将邮件发送给指定的收件人。这一步骤确
- 2020-08-20 Kettle 无法正常启动 报错:does not exist, please create it ;Unable to create the database cache
迷光
缓存数据库经验分享
当我启动etl的时候出现报错找不到指定文件Lockacquired.Settingstartlevelto100E:\data-integration\system\karaf\deploydoesnotexist,pleasecreateit.于是我进行了百度根据文章我知道是缓存文件导致的这个问题缓存文件造成的错误,只需要找到..\pdi-ce-6.0.1.0-386\data-integrat
- 第三章 可视化ETL平台——Kettle
okbin1991
etl数据仓库数据库
第三章可视化ETL平台——Kettle课程目标能够理解Kettle的主要用途能够搭建Kettle开发环境能够掌握Kettle输入组件的使用能够掌握Kettle输出组件的使用能够掌握Kettle转换组件的使用1.Kettle介绍1.1数据仓库数据仓库是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建的,对多样的业务数据进行筛选与整合。它为企业提供一定的BI能力,指导业务流程
- oracle listagg函数讲讲
谷晓光
数据库oracle数据库
listagg是oracle11.2增加的特性。功能类似wmsys.wm_concat函数,即将数据分组后,把指定列的数据通过指定符号合并。--listagg()函数,列转行。在每个分组内,LISTAGG根据orderby子句对列值进行排序,将排序后的结果拼接起来。--基本语法;listagg(待处理列,连接符号)withingroup(orderby用于拼接组内排序字段)selecta.*fro
- 从零到一建设数据中台 - 关键技术汇总
我码玄黄
数据中台数据挖掘数据分析大数据
一、数据中台关键技术汇总语言框架:Java、Maven、SpringBoot数据分布式采集:Flume、Sqoop、kettle数据分布式存储:HadoopHDFS离线批处理计算:MapReduce、Spark、Flink实时流式计算:Storm/SparkStreaming、Flink批处理消息队列:Kafka查询分析:Hbase、Hive、ClickHouse、Presto搜索引擎:Elast
- case when then else end 行转列/列转行
苟且红利
-行转列(多行转单列)--数据表row2col_1:col1col2col3ab1ab2ab3cd4cd5cd6--将其转化为:col1col2col3ab1,2,3cd4,5,6-一般使用groupbycolumn..+concat_ws+collect_list/collect_set来实现concat_ws(‘,’,collect_list(column))--备注:collect_list
- Hive--行转列/列转行
韩家小志
#Hive函数hive
行转列/列转行一、lateralview案例1:与explode连用案例2:与parse_url_tuple连用二、explode三、行列转换行转列多行转多列多行转单列列转行多列转多行单列转多行一、lateralview分类:视图功能:配合UDTF来使用,把某一行数据拆分成多行数据很多的UDTF不能将结果与源表进行关联,使用lateralview,可以将UDTF拆分的单个字段数据与原始表数据关联上
- MATLAB 编程风格指南
DeepLearning
Matlab学习matlab编程文档语言测试documentation
转载自:http://blog.csdn.net/chenyusiyuan/archive/2007/11/19/1892378.aspxMATLAB编程风格指南——RichardJohnsonVersion1.5,Oct.2002版权;Datatool所有翻译:Genial@USTC“Languageislikeacrackedkettleonwhichwebeattunedtodanceto,
- mendix项目中遇到问题整理
爱笑的人、
mendixservletjava开发语言
目录从数据库内查出的数据和展示数据有所区别,需要列转行在javaAction中可以通过此方法可以从数据库查询到需要的数据编辑一个表格内数据经过列转行操作之后展示,此时修改表格内的数据,并更新从数据库内查出的数据和展示数据有所区别,需要列转行展示数据通过代码转换,传入从数据库内拿到的12条list//BEGINUSERCODEMapmap=newHashedMapresult=newArrayLis
- 二百二十三、Kettle——从Hive增量导入到ClickHouse(根据day字段判断)
天地风雷水火山泽
Kettlehiveclickhousekettle
一、目的需要用Kettle从Hive的DWS层库表数据增量同步到ClickHouse的ADS层库表中,不过这次的增量判断字段是day字段,不像之前的create_time字段因为day字段需要转换类型,而create_time字段字段不需要转换类型,因此两者的Kettle任务配置有所不同,也踩了一些坑,因此再写一篇博客整理一下,根据day字段判断的情况下kettle如何配置才能从Hive增量导入到
- ETL数据集成工具DataX、Kettle、ETLCloud特点对比
RestCloud
ETL数据集成dataxkettle
ETL数据集成工具对于数据仓库,大数据集成类应用,通常会采用ETL工具辅助完成。ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至的端的过程当前的很多应用也存在大量的ELT应用模式。常见的ETL工具或类ETL的数据集成同步工具很多,以下对开源的datax、Kettle、ETLClou
- ETL数据集成工具DataX、Kettle、ETLCloud特点对比
etlkettle
ETL数据集成工具对于数据仓库,大数据集成类应用,通常会采用ETL工具辅助完成。ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至的端的过程当前的很多应用也存在大量的ELT应用模式。常见的ETL工具或类ETL的数据集成同步工具很多,以下对开源的datax、Kettle、ETLClou
- Linux下删除n天前的文件2019-01-16
dataHunter
#!/bin/bashfind/opt/kettleLogs-mtime+10-typef-name"JOB_H-*.log"-execrm-rf{}\;find/opt/kettleLogs-mtime+30-typef-name"JOB_D-*.log"-execrm-rf{}\;
- Kettle发送邮箱并在正文中以表格形式展示内容[升级版]
GuangHui
在上一篇关于Kettle发送邮件并在正文中以表格形式展示内容的文章中,已经提到Kettle邮箱正文中支持HTML格式,要在邮箱正文中展示表格,那就行拼出HTML,然后扔到邮箱正文中.方法就是这么简单直接,上一篇文章中拼接HTML是在数据库SQL查询时完成的,而这次咱尝试使用Kettle支持的JavaScript脚本来完成.下面就结合一个小的需求案例,来说明一下.一.需求说明结算系统每天实时接收积分
- Kettle 导入优化指南
Kassadar
在“表输出”的“上一个步骤“的组件上右键选择”数据发送……”的方式为”Round-Robin”。在”表输出”组件上右键选择“改变开始复制的数量……”填入并发数量“{d}”。第一次时注意调大弹出框,默认是看不到”确定”按钮的。配置完成后,“表输出”组件左上角会有“x{d}”字样。配置目标”数据源”,在”选项”中配置”命令参数”。
- SQL如何实现数据表行转列、列转行?
可口可乐Vip
sql数据库linux
SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集。本文将介绍在SQL中如何实现数据表地行转列、列转行操作,以及实际应用示例。这里通过表下面三张表进行举例SQL创建数据库和数据表数据表示例数据分别如下:data_learning.product_order(商品销量表):data_learning.product(商品信息表):data_learning.product_ca
- ubuntu22安装和部署Kettle8.2
在Ubuntu22上安装和部署Kettle8.2,你可以按照以下步骤进行:安装Java环境:Kettle需要Java环境来运行。在终端中输入以下命令安装Java:sudoaptupdatesudoaptinstallopenjdk-8-jdk安装完成后,你可以通过命令java-version来验证Java是否安装成功。下载并解压Kettle:从Pentaho官网或者其他可信赖的源下载Kettle8
- HiveSQL——不使用union all的情况下进行列转行
爱吃辣条byte
#HIveSQL大数据数据仓库
参考文章:HiveSql一天一个小技巧:如何不使用unionall进行列转行_不unionall-CSDN博客文章浏览阅读881次,点赞5次,收藏10次。本文给出一种不使用传统UNIONALL方法进行行转列的方法,其中方法一采用了concat_ws+posexplode()方法,利用posexplode的位置索引实现key-value之间的一一对应,方法二采用explode()+casewhen的
- 时区设置引起的一系列问题
flexitime
linux
这几天都在一直研究如何使用metabase和Kettle的事,我在一台Centos上使用Docker安装了metabase是,并用Docker部署一个Postgresql作为数据库,在另一台Centos上安装了Kettle当我大概知道如何使用后,我把使用kettle把我们一个Oracle业务数据库连上,通过脚本采集数据到Postgresql上面,后来在写SQL的过程中发现PG上的数据与Oracle
- kettle--文本文件输出有空格解决方案
刀鋒偏冷
etl
在kettle文本文件输出时,不管如何设置字段类型和长度,导出的数据都会有空格,遇到这一问题,可以在文本文件输出控件中勾选这一项,即可解决这一问题。文本文件输出:
- GBASE之GROUP_CONCAT()函数
shirsl
数据库sql
listagg()oforacle在oracle中可以使用listagg()函数实现列转行的操作,将多列记录聚合为一条记录。官方文档参考:参考链接官方示例:示例1:Thefollowingsingle-setaggregateexamplelistsalloftheemployeesinDepartment30inthehr.employeestable,orderedbyhiredateandl
- kettle控件-复制记录到结果/ 从结果获取记录的使用
刀鋒偏冷
大数据etl
在数据采集过程中,遇到对方数据传送不及时的情况,导致数据漏采集,需要手工反复补采。为了解决这一问题,可以利用kettle的复制记录到结果/从结果获取记录控件。job的整个流程如下:设置变量:创建目录:get_time_id转换:此时的表输入:构建的的时间段的这些时间在表中不存在,即是没有采集到的数据文件。复制记录到结果:这时就是将表输入查询出来的时间复制到结果。load_file是一个job。在高
- 大数据系列—数据迁移(Sqoop,Flume,DataX)对比学习(stage3)
道-闇影
bigdata大数据sqoopflume
Boys,Grils,Friends!MynameisJinsuo.Shi.一个不正经的大数据开发工程师,目前从事在公司主要进行CDP平台的数据接入、数据的ETL、数据的融合与事件的展开工作。个人大数据技术栈:DataX,Sqoop,Hadoop,Hive,Spark,Flink,Hbase,Kafka,Kettle,Azkaban,Airflow,Tableau…个人在学习领域:Python,P
- 专业分析师,教你3分钟高效数据处理法
数据观数据分析平台
来自:数据观https://www.shujuguan.cn/?from=jianshu当小观还在excel里面,通过复制、选择性粘贴、转置来完成列转行时,如果谁在我面前微动鼠标,按个按钮,就完成一切。我一定以为自己遇见了大表哥!其实,我只是遇到了数据观中的ETL。下面,小观就通过一个简单的数据处理过程,为大家演示一下其中的列转行、修改列类型、计算、添加常量列四大功能。原始数据处理后的数据风格大变
- 【kettle】pentaho/data-integration 报错:org.apache.http.NoHttpResponseException: failed to respond
lisacumt
apache大数据
一、版本说明kettle版本:8.2.0.0-342【kettle】pentaho/data-integrationdebug查看日志方法二、报错说明:核心报错内容:org.apache.http.NoHttpResponseException:xxx.com:80failedtorespond执行到某一个请求时候报错,内容:2024/01/1815:24:06-获取json.0-Connecti
- 【kettle】pentaho/data-integration debug 查看日志方法
lisacumt
大数据
kettle版本:8.2.0.0-R修改console打印日志级别:修改root打印日志级别:使用SpoonDebug.bat,根据提示,依次输入nyn。cmd窗口即可打印详细日志。UI显示详细日志方法:
- Hive与PrestoSQL中的并列列转行
对许
#Hive#Prestohive
并列列转行1、背景描述2、Hive实现3、PrestoSQL实现1、背景描述通常我们在处理数据时,如果遇到一个字段存储多个值,常常需要把一行数据转换为多行数据,形成标准的结构化数据例如,将下面的两列数据并列转换为三行,使得code和name一一对应的idcodename1a、b、cA、B、C2、Hive实现使用Hive的lateralviewposexplode实现selectid,pos1,su
- kettle在不同类型数据库之间进行数据传输并对字段进行映射
好大的月亮
Mysql
官方文档https://help.pentaho.com/Documentation/7.1/0J0/0C0/020下载地址https://community.hitachivantara.com/s/article/data-integration-kettle下载完之后双击运行启动成功这边先介绍转换模式下的数据导入导出双击转换,在输入->表输入中把表输入拖拽到右边,这里的表输入其实就是我们要读
- Mysql的行专列和列转行
呆某人
数据库行转列列转行
行转列表结构和数据准备建表CREATETABLE`student`(`ID`int(10)NOTNULLAUTO_INCREMENT,`USER_NAME`varchar(20)DEFAULTNULL,`COURSE`varchar(20)DEFAULTNULL,`SCORE`floatDEFAULT'0',PRIMARYKEY(`ID`))ENGINE=InnoDBAUTO_INCREMENT=
- Kettle入门
叶逸灵
Kettle版本:7.1,下载地址:http://mirror.bit.edu.cn/pentaho/Data%20Integration/(这个镜像是北京理工大学提供,目前只有Kettle6.1、7.0、7.1)Kettle官方地址下载:https://community.hitachivantara.com/s/article/data-integration-kettle。image.png
- JVM StackMapTable 属性的作用及理解
lijingyao8206
jvm字节码Class文件StackMapTable
在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack Map Table。在Java 7版
- 回调函数调用方法
百合不是茶
java
最近在看大神写的代码时,.发现其中使用了很多的回调 ,以前只是在学习的时候经常用到 ,现在写个笔记 记录一下
代码很简单:
MainDemo :调用方法 得到方法的返回结果
- [时间机器]制造时间机器需要一些材料
comsci
制造
根据我的计算和推测,要完全实现制造一台时间机器,需要某些我们这个世界不存在的物质
和材料...
甚至可以这样说,这种材料和物质,我们在反应堆中也无法获得......
 
- 开口埋怨不如闭口做事
邓集海
邓集海 做人 做事 工作
“开口埋怨,不如闭口做事。”不是名人名言,而是一个普通父亲对儿子的训导。但是,因为这句训导,这位普通父亲却造就了一个名人儿子。这位普通父亲造就的名人儿子,叫张明正。 张明正出身贫寒,读书时成绩差,常挨老师批评。高中毕业,张明正连普通大学的分数线都没上。高考成绩出来后,平时开口怨这怨那的张明正,不从自身找原因,而是不停地埋怨自己家庭条件不好、埋怨父母没有给他创造良好的学习环境。
- jQuery插件开发全解析,类级别与对象级别开发
IT独行者
jquery开发插件 函数
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给
jQuery添加新的全局函数,相当于给
jQuery类本身添加方法。
jQuery的全局函数就是属于
jQuery命名空间的函数,另一种是对象级别的插件开发,即给
jQuery对象添加方法。下面就两种函数的开发做详细的说明。
1
、类级别的插件开发 类级别的插件开发最直接的理解就是给jQuer
- Rome解析Rss
413277409
Rome解析Rss
import java.net.URL;
import java.util.List;
import org.junit.Test;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.S
- RSA加密解密
无量
加密解密rsa
RSA加密解密代码
代码有待整理
package com.tongbanjie.commons.util;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerat
- linux 软件安装遇到的问题
aichenglong
linux遇到的问题ftp
1 ftp配置中遇到的问题
500 OOPS: cannot change directory
出现该问题的原因:是SELinux安装机制的问题.只要disable SELinux就可以了
修改方法:1 修改/etc/selinux/config 中SELINUX=disabled
2 source /etc
- 面试心得
alafqq
面试
最近面试了好几家公司。记录下;
支付宝,面试我的人胖胖的,看着人挺好的;博彦外包的职位,面试失败;
阿里金融,面试官人也挺和善,只不过我让他吐血了。。。
由于印象比较深,记录下;
1,自我介绍
2,说下八种基本类型;(算上string。楼主才答了3种,哈哈,string其实不是基本类型,是引用类型)
3,什么是包装类,包装类的优点;
4,平时看过什么书?NND,什么书都没看过。。照样
- java的多态性探讨
百合不是茶
java
java的多态性是指main方法在调用属性的时候类可以对这一属性做出反应的情况
//package 1;
class A{
public void test(){
System.out.println("A");
}
}
class D extends A{
public void test(){
S
- 网络编程基础篇之JavaScript-学习笔记
bijian1013
JavaScript
1.documentWrite
<html>
<head>
<script language="JavaScript">
document.write("这是电脑网络学校");
document.close();
</script>
</h
- 探索JUnit4扩展:深入Rule
bijian1013
JUnitRule单元测试
本文将进一步探究Rule的应用,展示如何使用Rule来替代@BeforeClass,@AfterClass,@Before和@After的功能。
在上一篇中提到,可以使用Rule替代现有的大部分Runner扩展,而且也不提倡对Runner中的withBefores(),withAfte
- [CSS]CSS浮动十五条规则
bit1129
css
这些浮动规则,主要是参考CSS权威指南关于浮动规则的总结,然后添加一些简单的例子以验证和理解这些规则。
1. 所有的页面元素都可以浮动 2. 一个元素浮动后,会成为块级元素,比如<span>,a, strong等都会变成块级元素 3.一个元素左浮动,会向最近的块级父元素的左上角移动,直到浮动元素的左外边界碰到块级父元素的左内边界;如果这个块级父元素已经有浮动元素停靠了
- 【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景
bit1129
partition
0.Kafka服务器配置
3个broker
1个topic,6个partition,副本因子是2
2个consumer,每个consumer三个线程并发读取
1. Producer
package kafka.examples.multibrokers.producers;
import java.util.Properties;
import java.util.
- zabbix_agentd.conf配置文件详解
ronin47
zabbix 配置文件
Aliaskey的别名,例如 Alias=ttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]+),,,,\1], 或者ttlsa的用户ID。你可以使用key:vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]+),,,,\1],也可以使用ttlsa.userid。备注: 别名不能重复,但是可以有多个
- java--19.用矩阵求Fibonacci数列的第N项
bylijinnan
fibonacci
参考了网上的思路,写了个Java版的:
public class Fibonacci {
final static int[] A={1,1,1,0};
public static void main(String[] args) {
int n=7;
for(int i=0;i<=n;i++){
int f=fibonac
- Netty源码学习-LengthFieldBasedFrameDecoder
bylijinnan
javanetty
先看看LengthFieldBasedFrameDecoder的官方API
http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html
API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下:
实
- AES加密解密
chicony
加密解密
AES加解密算法,使用Base64做转码以及辅助加密:
package com.wintv.common;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decod
- 文件编码格式转换
ctrain
编码格式
package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
- mysql 在linux客户端插入数据中文乱码
daizj
mysql中文乱码
1、查看系统客户端,数据库,连接层的编码
查看方法: http://daizj.iteye.com/blog/2174993
进入mysql,通过如下命令查看数据库编码方式: mysql> show variables like 'character_set_%'; +--------------------------+------
- 好代码是廉价的代码
dcj3sjt126com
程序员读书
长久以来我一直主张:好代码是廉价的代码。
当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。
当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。”
我只
- Android网络请求库——android-async-http
dcj3sjt126com
android
在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通
- ORACLE 复习笔记之SQL语句的优化
eksliang
SQL优化Oracle sql语句优化SQL语句的优化
转载请出自出处:http://eksliang.iteye.com/blog/2097999
SQL语句的优化总结如下
sql语句的优化可以按照如下六个步骤进行:
合理使用索引
避免或者简化排序
消除对大表的扫描
避免复杂的通配符匹配
调整子查询的性能
EXISTS和IN运算符
下面我就按照上面这六个步骤分别进行总结:
- 浅析:Android 嵌套滑动机制(NestedScrolling)
gg163
android移动开发滑动机制嵌套
谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性
NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]-->
比如你使用了Toolbar,下面一个ScrollView,向上滚
- 使用hovertree菜单作为后台导航
hvt
JavaScriptjquery.nethovertreeasp.net
hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。
0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm
hovertree插件包含文件:
http://keleyi.com/jq/hovertree/css
- SVG 教程 (二)矩形
天梯梦
svg
SVG <rect> SVG Shapes
SVG有一些预定义的形状元素,可被开发者使用和操作:
矩形 <rect>
圆形 <circle>
椭圆 <ellipse>
线 <line>
折线 <polyline>
多边形 <polygon>
路径 <path>
- 一个简单的队列
luyulong
java数据结构队列
public class MyQueue {
private long[] arr;
private int front;
private int end;
// 有效数据的大小
private int elements;
public MyQueue() {
arr = new long[10];
elements = 0;
front
- 基础数据结构和算法九:Binary Search Tree
sunwinner
Algorithm
A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all
- 项目出现的一些问题和体会
Steven-Walker
DAOWebservlet
第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。
这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。
dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。
&
- 高手问答:Java老A带你全面提升Java单兵作战能力!
ITeye管理员
java
本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论!
作者简介:
淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。
CSDN博客地址:
http://blog.csdn.net/xieyuooo
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,