精华内容
下载资源
问答
  • workflow_requestbase d 和上述三张表存在筛选关系 a.requestid=d.requestid and d.currentnodetype=3 //人员表 hrmresource id=上述三张表.人员 需要 格式 人员、累计借款金额 sum(c.jkje)、累计还款金额sum(a....
  • // 按照日期列表读出个RDD存在一个Set中,再用SparkContext.union()合并成一个RDD var rddSet: Set[RDD[(org.apache.hadoop.hbase.io.ImmutableBytesWritable, org.apache.hadoop.hbase.client.Result)] ] = Set...

    直接上代码

    package com.tophant
    
    import java.text.SimpleDateFormat
    
    import com.tophant.html.Util_html
    import com.tophant.util.Util
    import org.apache.commons.lang.{StringEscapeUtils, StringUtils}
    import org.apache.hadoop.hbase.HBaseConfiguration
    import org.apache.hadoop.hbase.client.Scan
    import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp
    import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
    import org.apache.hadoop.hbase.util.{Base64, Bytes}
    import org.apache.spark.rdd.RDD
    import org.apache.spark.{SparkConf, SparkContext}
    import org.slf4j.LoggerFactory
    
    object Hbase2hdfs {
      def main(args: Array[String]): Unit = {
        val logger = LoggerFactory.getLogger(getClass)
        // 命令行参数个数必须为2
        if (args.length != 5) {
          logger.error("参数个数错误")
          logger.error("Usage: Classify <开始日期> <结束日期> <存储位置> <host>")
          System.exit(1)
        }
    
        // 获取命令行参数中的行为数据起止日期
        val tableName = args(0).trim  //hbase表的前缀
        val startDate = args(1).trim  //hbase表的后缀起始日期
        val endDate   = args(2).trim  //hbase表的后缀截至日期
        val path = args(3).trim
        val host = args(4).trim
        // 根据起止日志获取日期列表
        // 例如起止时间为20160118,20160120,那么日期列表为(20160118,20160119,20160120)
        val dateSet = getDateSet(startDate, endDate)
    
        val sparkConf = new SparkConf()
          .setAppName("hbase2hdfs")
        //      .set("spark.default.parallelism","12")
        val sc = new SparkContext(sparkConf)
    
        val conf = HBaseConfiguration.create()
        //设置zooKeeper集群地址,也可以通过将hbase-site.xml导入classpath,但是建议在程序里这样设置
        conf.set("hbase.zookeeper.quorum", "10.0.71.501,10.0.71.502,10.0.71.503")
        //设置zookeeper连接端口,默认2181
        conf.set("hbase.zookeeper.property.clientPort", "2181")
    
        //组装scan语句
        val scan=new Scan()
        scan.setCacheBlocks(false)
        scan.addFamily(Bytes.toBytes("rd"))
        scan.addColumn(Bytes.toBytes("rd"), Bytes.toBytes("host"))
        scan.addColumn("rd".getBytes, "url".getBytes)
        scan.addColumn("rd".getBytes, "http.request.method".getBytes)
        scan.addColumn("rd".getBytes, "http.request.header".getBytes)
    
    
        val hostFilter = new SingleColumnValueFilter(Bytes.toBytes("rd"),
          Bytes.toBytes("host"),
          CompareOp.EQUAL,
          Bytes.toBytes(host))
        scan.setFilter(hostFilter)
        import org.apache.hadoop.hbase.mapreduce.TableInputFormat
        import org.apache.hadoop.hbase.protobuf.ProtobufUtil
        val proto = ProtobufUtil.toScan(scan)
        val ScanToString = Base64.encodeBytes(proto.toByteArray)
    
    
        // 按照日期列表读出多个RDD存在一个Set中,再用SparkContext.union()合并成一个RDD
        var rddSet: Set[RDD[(org.apache.hadoop.hbase.io.ImmutableBytesWritable, org.apache.hadoop.hbase.client.Result)] ] = Set()
        dateSet.foreach(date => {
          conf.set(TableInputFormat.SCAN, ScanToString)
          conf.set(TableInputFormat.INPUT_TABLE, tableName + date) // 设置表名
          val bRdd: RDD[(org.apache.hadoop.hbase.io.ImmutableBytesWritable, org.apache.hadoop.hbase.client.Result)] =
            sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
            classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
            classOf[org.apache.hadoop.hbase.client.Result])
          rddSet += bRdd
        })
    
        val hBaseRDD = sc.union(rddSet.toSeq)
    
        val kvRDD = hBaseRDD.
          map { case (_, result) =>
            //通过列族和列名获取列
            var url = Bytes.toString(result.getValue("rd".getBytes, "url".getBytes))
            val host = Bytes.toString(result.getValue("rd".getBytes, "host".getBytes))
            var httpRequestHeaders = Bytes.toString(result.getValue("rd".getBytes, "http.request.header".getBytes))
            var httpResponseHeaders = Bytes.toString(result.getValue("rd".getBytes, "http.response.header".getBytes))
    
      
    
            val value = (url + "$$$" + httpRequestHeaders + "$$$" + httpResponseHeaders )
    
            ( host, value)
          }
        .saveAsTextFile(path)
      }
    
      def getDateSet(sDate:String, eDate:String): Set[String] = {
        // 定义要生成的日期列表
        var dateSet: Set[String] = Set()
    
        // 定义日期格式
        val sdf = new SimpleDateFormat("yyyyMMdd")
    
        // 按照上边定义的日期格式将起止时间转化成毫秒数
        val sDate_ms = sdf.parse(sDate).getTime
        val eDate_ms = sdf.parse(eDate).getTime
    
        // 计算一天的毫秒数用于后续迭代
        val day_ms = 24*60*60*1000
    
        // 循环生成日期列表
        var tm = sDate_ms
        while (tm <= eDate_ms) {
          val dateStr = sdf.format(tm)
          dateSet += dateStr
          tm = tm + day_ms
        }
    
        // 日期列表作为返回
        dateSet
      }
    }

     

    展开全文
  • 业务场景:在用户轨迹上增加筛选功能,实现根据标签1和2来筛选解决思路:在原有数据上增加接收前端的数据的字段,然后在controller层处理字段的信息,然后分别增加条件进行判断实现筛选功能--只写下我修改的部分(此...

    业务场景:在用户轨迹上增加筛选功能,实现根据标签1和2来筛选

    bVcKLmB解决思路:在原有数据上增加接收前端的数据的字段,然后在controller层处理字段的信息,然后分别增加条件进行判断实现筛选功能--只写下我修改的部分(此文章的目的就是为了在日常中查缺补漏,便于日后的复习和学习)

    代码实现:

    1.在dao层实现字段增加来接收前端的数据(和前端人员沟通确定参数的形式)

    bVcKLnQ

    2.在实现层对条件2实现筛选if (!StringUtil.isEmpty(params.getType())){

    String[] str2 = params.getType().split(",");

    Set filter = new HashSet<>();

    for (String type : str2) {

    filter.add(type);}

    query.addMustTerm(new AbstractTermV2.MustMultTerm("deviceOs",filter));

    }

    3.在controller增加筛选条件long total = 0;

    SimpleQuery.SimpleResponse rumResponse = null;

    //浏览器

    if(!StringUtil.isEmpty(params.getTermType())) {

    String n = "浏览器";

    String[] str = params.getTermType().split(",");

    Set termType = new HashSet<>();

    for (String string : str) {

    termType.add(string);

    }

    if (termType.contains(n)) {

    rumResponse = queryRum(params, cluster.keySet());

    total = rumResponse.getTotal();

    }

    }

    rumResponse = queryRum(params, cluster.keySet());

    total = rumResponse.getTotal();

    在上面的业务实现过程中,所涉及的知识点是后端如何接收前端的数据,Java中使用.split()的方法,以及集合遍历的知识:后端接收前端数据(https://blog.csdn.net/justry_...)

    1-1:后端参数是一个对象,且该参数前是以@RequestBody修饰的,那么前端传递json参数时,必须满足以下要求:

    后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。

    1-2:json字符串中,如果value为""的话,后端对应属性如果是String类型的,那么接受到的就是"",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。

    1-3:json字符串中,如果value为null的话,后端对应收到的就是null

    1-4:如果某个参数没有value的话,在传json字符串给后端时,要么干脆就不把该字段写到json字符串中;要么写value时, 必须有值,null 或""都行。千万不能有类似"stature":,这样的写法,如{"":,--->X

    "":null,--->正确

    "":""---->正确}

    @RequestBody直接以String接收前端传过来的json数据:

    后端对应的Controller:

    bVcKLw9

    使用PostMan测试:

    bVcKLxi

    2.遍历集合的方法

    参考:https://www.jb51.net/article/...

    3.split()的方法使用

    使用此方法返回的是一个数组(以特定的格式分隔后的数组)

    特殊情况有 * ^ : | . \

    在使用这些为分隔条件是需注意必须使用转义符即\加以转义,然后如果使用多个分隔符则需要借助 | 符号,如二所示,但需要转义符的仍然要加上分隔符进行处理

    参考:https://www.cnblogs.com/mingf...

    展开全文
  • } } 根据菜品价格区间查询筛选菜品: FoodsModel::with(['specs' => function($query){ $query->select(['title', 'price']); }]) ->whereHas('specs', function ($query) use ($params){ // price_from,price_end...

    例如以下表:

    • 菜品表: foods
    字段说明
    id 主键
    title 菜品名称
    • 菜品规格表: foods_specs
    字段说明
    id 主键
    title 规格名称
    foods_id 菜品表ID
    price 价格
    • 菜品模型: FoodsModel
    class FoodsModel extends Model
    {
      
         // 省略
         /**
         * 规格
         * @return HasMany
         */
        public function specs()
        {
            return $this->hasMany(\App\Model\FoodsSpecsModel::class, 'foods_id', 'id');
        }
     
       // 省略
    }
    

    菜品规格模型: FoodsSpecsModel

    class FoodsSpecsModel extends Model
    {
        protected $table = 'foods_specs';
     
        protected function foods()
        {
            return $this->belongsTo('App\Model\FoodsModel', 'foods_id', 'id');
        }
    }
    

    根据菜品价格区间查询筛选菜品:

    FoodsModel::with(['specs' => function($query){
                $query->select(['title', 'price']);
            }])
            ->whereHas('specs', function ($query) use ($params){
                // price_from,price_end对应价格区间, 可选参数
                if (isset($params['price_from']) && isset($params['price_end'])){
                    $query->whereBetween('price', [$params['price_from'], $params['price_end']]);
                }
            })->select('title')->get();
    
    展开全文
  • 这样必须提供on条件才能进行查询。当然,join的条件一定要设置好,否则也会出现笛卡尔积的。 比如tableA和TableB向关联的是ID字段 如果用“,“分隔两个表的话语据应该如下 select count(*) from table...
    在写join类型的语句的时候,最好使用join来代替直接用“,”分隔多个表。这样必须提供on条件才能进行查询。当然,join的条件一定要设置好,否则也会出现笛卡尔积的。

    比如tableA和TableB向关联的是ID字段

    如果用“,“分隔两个表的话语据应该如下

    select count(*)
    from tableA ,TableB
    where TableA.id=TableB.id

    如果把where 语句漏掉就出现笛卡尔积了
    select count(*)
    from tableA ,TableB

    同样,写成join的话,如果不指定on里的条件的话,语法是错的
    select count(*)
    from TableA join TableB
    on TableA.id=TableB.id

    但是如果再on里指定了一个错误的关联条件的话,也是会出现笛卡尔积的,比如:
    select count(*)
    from TableA join TableB
    on 1=1

    当然一般人不会闲得去把on条件设置成1=1,不过这是举个例子,就是为了说明on的筛选条件一定要设置好。

    转载于:https://www.cnblogs.com/yhb199/archive/2008/06/11/1217572.html

    展开全文
  • Excel 高级筛选实现多条件筛选数据

    千次阅读 2019-12-25 16:41:36
    实际场景: 需要在几百张表筛选出需要更新的表结构的几十张表,如果使用普通筛选方式只能一次次筛选复制,重复操作! So,这个时候就需要excel的高级筛选功能来大展身手了。 但是这个时候会遇到最大的阻碍...
  • Mapper /** * @description 查询出订阅表信息 * @author 宫崎不骏 * @date 2020/4/27 9:55 * @param * @return */ List<OneVo> getAllSubscribe(); List<TwoVo> getAllNoticeInfoNb(String provinceName, String ...
  • 假设A和B进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要是查询 主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出N ULL与之匹配。 外连接分类? 左...
  • 总结关于 mysqldump 多张表筛选备份的使用方法
  • 一个SQL多张表连接的例子

    千次阅读 2017-12-29 16:34:01
    之前碰到一个需求需要表连接,现在把需求简化一下作为一个学习的参考案例。   有三张表,如图。 为描述方便,分别用表1,表2和表3指代。 表1里面的ID和表2里面的ID有关联关系。 表2里面的ID_LINK和表3里面...
  • 注意 : 可以使用ORM提供给关系表操作API以及正方向和双下划线查询 第三张表中没有其他字段 class Author(models.Model): name = models.CharField(max_length=32,verbose_name='作者名') # 通过ORM自带的...
  • 最近在做一个项目涉及到了一个表、多条件、不确定筛选的功能,在这里和大家分享一下。 首先,我所使用的是SSH框架,多年的项目经验和面向对象思维的引导,我对Hibernate情有独钟; 其次,业务需求是要实现周边...
  • select 查询列表 from 表名 where 筛选条件; 条件查询查询顺序为: 第一步:表名,表示查询来自哪张表 第二步:筛选条件,在选定表中按条件筛选 第三步:查询查询筛选后的字段 分类 一、按条件表达式筛选 ...
  • 现有数据库 database_a ,database_a 中有表 users,要求从 users 表中按条件(例:注册时间是2017年1月1日以后的用户)筛选出一部分用户数据,插入到线上服务器数据库 database_b中的 users表中,俩张表的结构是...
  • 最近工作中由于要求只能用hibernate+jpa 与数据库进行交互,在简单查询中,jpa继承CrudRepository接口 ,然后利用jpa的方法命名规范进行jpql查询,然而在进行复杂查询时,需要继承JpaSpecificationExecutor接口利用...
  • 目前项目遇到一个问题,我想将相同结构的表按照不同的类别建立多张表,用Ef如何实现? 例如:一个气象设备,可以采集“温度”“湿度”等个要素,在数据库内对应了一个设备表,一个要素表(这个主要记录要素的一些...
  • 新坑~~ 最近几个月,本人因为工作原因一直在...连接多张表 其实语法很类似,以左连接为例: A left join B on A.id = B.id left join C on A.id = C.id 注意这么做以后数据拼接的比较慢,注意开销
  • 分页+文件上传+2张表查询 首先菜系同之前的菜系类似的有 增删改查 的功能. 区别是 加入了分页 功能 这里菜的编号 不是主键 添加功能: 文件上传 + 数据回显 (2表查询菜系+菜品) 菜系本身是一张表,用的...
  • exp username/password file=/Oracle有权限的目录/projectname.dmp tables=\(username.TableName\) query=\"WHERE TIME \>= TO_DATE\(\'2019-01-01 00:00:00\',\'yyyy-mm-dd hh24:mi:ss\'\)\";...
  • SQL查询时的join与where筛选比较

    千次阅读 2018-11-21 10:03:04
    数据库在通过连接两张或多张表来返回记录,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left jion,on和where条件的区别如下: 1、 on条件是在生成临时表使用的条件,它不管on中...
  • 多条件查询

    2019-04-07 21:50:40
    查询分为两种,一是单表查询,二是查询或者说是多条件查询,首先我们要确定好我们所需要的表。接下来要讲的是查询或者说是多条件查询,在者之前我们要搭建好框架即是创建好区域在区域里面的Controllers点击...
  • HBase条件查询多条件查询

    千次阅读 2017-03-22 10:26:54
    HBase的查询实现只提供两种方式: 1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get...实现条件查询功能使用的就是scan方式,scan在使用有以下几点值得注意: 1、scan可以通过setCa
  • 我们在设计RowKey可以这样做:采用UserID + CreateTime + FileID组成rowKey,这样既能满足多条件查询,又能有很快的查询速度。 需要注意以下几点: 1、每条记录的RowKey,每个字段都需要填充到相同长度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,854
精华内容 5,941
关键字:

多张表查询时的条件筛选