爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      转 GraphQL Schema Stitching explained: Schema Delegation

      首页 知识中心 其他 文章详情页

      转 GraphQL Schema Stitching explained: Schema Delegation

      2024-05-14 08:53:33 阅读次数:58

      GraphQL,schema

      转 GraphQL Schema Stitching explained: Schema Delegation

      转自官方文档

      In the last article, we discussed the ins and outs of remote (executable) schemas. These remote schemas are the foundation for a set of tools and techniques referred to as schema stitching.

      Schema stitching is a brand new topic in the GraphQL community. In general, it refers to the act of combining and connecting multiple GraphQL schemas (or schema definitions) to create a single GraphQL API.

      There are two major concepts in schema stitching:

      • Schema delegation: The core idea of schema delegation is to forward (delegate) the invocation of a specific resolver to another resolver. In essence, the respective fields of the schema definitions are being “rewired”.
      • Schema merging: Schema merging is the idea of creating the union of two (or more) existing GraphQL APIs. This is not problematic if the involved schemas are entirely disjunct — if they are not, there needs to be a way for resolving their naming conflicts.

      Notice that in most cases, delegation and merging will actually be used together and we’ll end up with a hybrid approach that uses both. In this article series, we’ll cover them separately to make sure each concept can be well understood by itself.

      Example: Building a custom GitHub API

      Let’s start with an example based on the public GitHub GraphQL API. Assume we want to build a small app that provides information about the Prisma GitHub organization.

      The API we need for the app should expose the following capabilities:

      • retrieve information about the Prisma organization (like its ID, email address, avatar URL or the pinned repositories)
      • retrieve a list of repositories from the Prisma organization by their names
      • retrieve a short description about the app itself

      Let’s explore the Query type from GitHub’s GraphQL schema definition to see how we can map our requirements to the schema’s root fields.

      Requirement 1: Retrieve info about Graphcool organization

      The first feature, retrieving information about the Prisma organization, can be achieved by using the repositoryOwner root field on the Query type:

      type Query {
      
        # ...
      
        # Lookup a repository owner (ie. either a User or an Organization) by login.
        repositoryOwner(
          # The username to lookup the owner by.
          login: String!
        ): RepositoryOwner
      
        # ...
      
      }
      

      We can send the following query to ask for information about the Prisma organization:

      query {
        repositoryOwner(login: "prismagraphql") {
          id
          url
          pinnedRepositories(first:100) {
            edges {
              node {
                name
              }
            }
          }
          # ask for more data here
        }
      }
      

      It works when we provide "prismagraphql" as the login to the repositoryOwnerfield.

      One issue here is that we can’t ask for the email in a straightforward way, because RepositoryOwner is only an interface that doesn’t have an email field. However, since we know that the concrete type of the Prisma organization is indeed Organization, we can work around this issue by using an inline fragment inside the query:

      query {
        repositoryOwner(login: "prismagraphql") {
          id
          ... on Organization {
            email
          }
        }
      }
      

      Ok, so this will work but we’re already hitting some friction points that don’t allow for a straightforward use of the GitHub GraphQL API for the purpose of our app.

      Ideally, our API would just expose a root field that allowed to ask directly for the info we want without needing to provide an argument upon every query and letting us ask for fields on Organization directly:

      type Query {
        prismagraphql: Organization!
      }
      

      Requirement 2: Retrieve list of Graphcool repositories by name

      How about the second requirement, retrieving a list of the Graphcool repositories by their names. Looking at the Query type again, this becomes a bit more complicated. The API doesn’t allow to retrieve a list of repositories directly— instead you can ask for single repositories by providing the owner and the repo’s name using the following root field:

      type Query {
      
        # ...
      
        # Lookup a given repository by the owner and repository name.
        repository(
          # The login field of a user or organization
          owner: String!
      
          # The name of the repository
          name: String!
        ): Repository
      
        # ...
      
      }
      

      Here’s a corresponding query:

      query {
        repository(owner: "prismagraphql", name: "graphql-yoga") {
          name
          description
          # ask for more data here
        }
      }
      

      However, what we actually want for our app (to avoid having to make multiple requests) is a root field looking as follows:

      type Query {
        prismagraphqlRepositories(names: [String!]): [Repository!]!
      }
      

      Requirement 3: Retrieve short description about the app itself

      Our API should be able to return a sentence describing our app, such as "This app provides information about the Prisma GitHub organization".

      This is of course a completely custom requirement we can’t fulfil based on the GitHub API — but rather it’s clear that we need to implement it ourselves, potentially with a simple Query root field like this:

      type Query {
        info: String!
      }
      

      Defining the application schema

      We’re now aware of the required capabilities of our API and the ideal Query type we need to define for the schema:

      type Query {
        prismagraphql: Organization!
        prismagraphqlRepositories(names: [String!]): [Repository!]!
        info: String!
      }
      

      Obviously, this schema definition in itself is incomplete: it misses the definitions for the Organization and the Repository types. One straightforward way of solving this problem is to just manually copy and paste the definitions from GitHub’s schema definition.

      This approach quickly becomes cumbersome, since these type definitions themselves depend on other types in the schema (for example, the Repository type has a field codeOfconduct of type CodeOfConduct) which you then need to manually copy over as well. There is no limit to how deep this dependency chain goes into the schema and you might even end up copying the full schema definition by hand.

      Note that when manually copying over types, there are three ways this can be done:

      • The entire type is copied over, no additional fields are added
      • The entire type is copied over and additional fields are added (or existing ones are renamed)
      • Only a subset of the type’s fields are copied over

      The first approach of simply copying over the full type is the most straightforward. This can be automated using graphql-import, as explained in the next section.

      If additional fields are added to the type definition or existing ones are renamed, you need to make sure to implement corresponding resolvers as the underlying API of course cannot take care of resolving these new fields.

      Lastly, you might decide to only copy over a subset of the type’s fields. This can be desirable if you don’t want to expose all the fields of a type (the underlying schema might have a password field on the User type which you don’t want to be exposed in your application schema).

      Importing GraphQL type definitions

      The package graphql-import saves you from that manual work by letting you share type definitions across different .graphql-files. You can import types from another GraphQL schema definition like so:

      # import Repository from "./github.graphql"
      # import Organization from "./github.graphql"
      
      type Query {
        info: String!
        graphcoolRepositories(names: [String!]): [Repository!]!
        graphcool: Organization!
      }
      

      In your JavaScript code, you can now use the importSchema function and it will resolve the dependencies for you, ensuring your schema definition is complete.

      Implementing the API

      With the above schema definition, we’re only halfway there. What’s still missing is the schema’s implementation in the form of resolver functions.

      If you’re feeling lost at this point, make sure to read this article which introduces the basic mechanics and inner workings of GraphQL schemas.

      Let’s think about how to implement these resolvers! A first version could look as follows:

      const { importSchema } = require('graphql-import')
      
      // Import the application schema, including the
      // types it depends on from `schemas/github.graphql`
      const typeDefs = importSchema('schemas/app.graphql')
      
      // Implement resolver functions for our three custom
      // root fields on the `Query` type
      const resolvers = {
        Query: {
          info: (parent, args) => 'This app provides information about the Prisma GitHub organization',
          prismagraphqlRepositories: (parent, { names }, context, info) => {
            // ???
          },
          prismagraphql: (parent, args, context, info) => {
            // ???
          }
        }
      }
      

      The resolver for info is trivial, we can return a simple string describing our app. But how to deal with the ones for prismagraphql and prismagraphqlRepositories where we actually need to return information from the GitHub GraphQL API?

      The naive way of implementing this here would be to look at the info argument to retrieve the selection set of the incoming query — then construct another GraphQL query from scratch that has the same selection set and send it to the GitHub API. This can even be facilitated by creating a remote schema for the GitHub GraphQL API but overall is still quite a verbose and cumbersome process.

      This is exactly where schema delegation comes into play! We saw before that GitHub’s schema exposes two root fields that (somewhat) cater the needs for our requirements: repositoryOwner and repository. We can now leverage this to save the work of creating a completely new query and instead forward the incoming one.

      Delegating to other schemas

      So, rather than trying to construct a whole new query, we simply take the incoming query and delegate its execution to another schema. The API we’re going to use for that is called delegateToSchema provided by graphql-tools.

      delegateToSchema receives seven arguments (in the following order):

      1. schema: An executable instance of GraphQLSchema (this is the target schema we want to delegate the execution to)
      2. fragmentReplacements: An object containing inline fragments (this is for more advanced cases we’ll not discuss in this article)
      3. operation: A string with either of three values ( "query" , "mutation" or "subscription") indicating to which root type we want to delegate
      4. fieldName: The name of the root field we want to delegate to
      5. args: The input arguments for the root field we’re delegating to
      6. context: The context object that’s passed through the resolver chain of the target schema
      7. info: An object containing information about the query to be delegated

      In order for us to use this approach, we first need an executable instance of GraphQLSchema that represents the GitHub GraphQL API. We can obtain it using makeRemoteExecutableSchema from graphql-tools.

      Notice that GitHub’s GraphQL API requires authentication, so you’ll need an authentication token to make this work. You can follow this guide to obtain one.

      In order to create the remote schema for the GitHub API, we need two things:

      • its schema definition (in the form of a GraphQLSchema instance)
      • an HttpLink that knows how to fetch data from it

      We can achieve this using the following code:

      // Read GitHub's schema definition from local file
      const gitHubTypeDefs = fs.readFileSync('./schemas/github.graphql', {encoding: 'utf8'})
      
      // Instantiate `GraphQLSchema` with schema definition 
      const introspectionSchema = makeExecutableSchema({ typeDefs: gitHubTypeDefs })
      
      // Create `HttpLink` based using person auth token
      const link = new GitHubLink(TOKEN)
      
      // Create remote executable schema based on schema definition and link
      const schema = makeRemoteExecutableSchema({
        schema: introspectionSchema,
        link,
      })
      

      GitHubLink is just a simple wrapper on top of HttpLink, providing a bit of convenience around creating the required Link component.

      Awesome, we now have an executable version of the GitHub GraphQL API that we can delegate to in our resolvers! ???? Let’s start by implementing the prismagraphql resolver first:

      const resolvers = {
        Query: {
          // ... other resolvers
          prismagraphql: (parent, args, context, info) => {
            return delegateToSchema(
              schema,
              {},
              'query',
              'repositoryOwner',
              {login: 'prismagraphql'},
              context,
              info
            )
          }
        }
      }
      

      We’re passing the seven arguments expected by the delegateToSchema function. Overall there are no surprises: The schema is the remote executable schema for the GitHub GraphQL API. In there, we want to delegate execution of our own prismagraphql query, to the repositoryOwner query from GitHub’s API. Since that field expects a login argument, we provide it with "prismagraphql" as its value. Finally we’re simply passing on the info and context objects through the resolver chain.

      The resolver for prismagraphqlRepositories can be approached in a similar fashion, yet it’s a bit trickier. What makes it different from the previous implementation is that the types of our prismagraphqlRepositories: [Repository!]! and the original field repository: Repository from GitHub’s schema definition don’t match up as nicely as before. We now need to return an array of repos, instead of a single one.

      Therefore, we go ahead and use Promise.all to make sure we can delegate multiple queries at once and bundle their execution results into an array of promises:

      const resolvers = {
        Query: {
          // ... other resolvers
          prismagraphqlRepositories: (parent, { names }, context, info) => {
            return Promise.all(
              names.map(name => {
                return delegateToSchema(
                  schema,
                  {},
                  'query',
                  'repository',
                  { owner: 'prismagraphql', name },
                  context,
                  info,
                )
              })
            )
          },
        }
      }
      

      This is it! We have now implemented all three resolvers for our custom GraphQL API. While the first one (for info) is trivial and simply returns a custom string, prismagraphql and prismagraphqlRepositories are using schema delegation to forward execution of queries to the underlying GitHub API.

      If you want to see a working example of this code, check out this repository.

      Schema delegation with graphql-tools

      In the above example of building a custom GraphQL API on top of GitHub, we saw how delegateToSchema can save us from writing boilerplate code for query execution. Instead of constructing a new query from scratch and sending it over with fetch, graphql-request or some other HTTP tool, we can use the API provided by graphql-tools to delegate the execution of the query to another (executable) instance of GraphQLSchema. Conveniently, this instance can be created as a remote schema.

      At a high-level, delegateToSchema simply acts as a “proxy” for the execute function from GraphQL.js. This means that under the hood it will reassemble a GraphQL query (or mutation) based on the information passed as arguments. Once the query has been constructed, all it does is invoke execute with the schema and the query.

      Consequently, schema delegation doesn’t necessarily require the target schema to be a remote schema, it can also be done with local schemas. In that regard, schema delegation is a very flexible tool— you might even want to delegate inside the sameschema. This is basically the approach taken in mergeSchemas from graphql-tools, where multiple schemas are first merged into a single one, then the resolvers are rewired.

      In essence, schema delegation is about being able to easily forward queries to an existing GraphQL API.

      Schema binding: An easy way to reuse GraphQL APIs

      Equipped with our newly acquired knowledge about schema delegation, we can introduce a new concept which is nothing but a thin convenience layer on top of schema delegation, called schema binding.

      Bindings for public GraphQL APIs

      The core idea of a schema binding is to provide an easy way for making an existing GraphQL API reusable so that other developers can now pull into their projects via NPM. This allows for an entirely new approach of building GraphQL “gateways” where it’s extremely easy to combine the functionality of multiple GraphQL APIs.

      With a dedicated binding for the GitHub API, we can now simplify the example from above. Rather than creating the remote executable schema by hand, this part is now done by the graphql-binding-github package. Here’s what the full implementation looks like where all the initial setup code we previously needed to delegate to the GitHub API is removed:

      const { GitHub } = require('graphql-binding-github')
      const { GraphQLServer } = require('graphql-yoga')
      const { importSchema } = require('graphql-import')
      
      const TOKEN = '__YOUR_GITHUB__TOKEN__' // https:///v4/guides/forming-calls/#authenticating-with-graphql
      const github = new GitHub(TOKEN)
      
      const typeDefs = importSchema('schemas/app.graphql')
      
      const resolvers = {
        Query: {
          info: (parent, args) => 'This app provides information about the Prisma GitHub organization',
          prismagraphqlRepositories: (parent, { names }, context, info) => {
            return Promise.all(
              names.map(name => {
                return github.delegate(
                  'query',
                  'repository',
                  { owner: 'prismagraphql', name },
                  context,
                  info,
                )
              })
            )
          },
          prismagraphql: (parent, args, context, info) => {
            return github.delegate(
              'query',
              'repositoryOwner',
              {login: 'prismagraphql'},
              context,
              info
            )
          }
        }
      }
      
      const server = new GraphQLServer({ typeDefs, resolvers })
      server.start(() => console.log('Server running on http://localhost:4000'))
      

      Instead of creating the remote schema ourselves, we’re simply instantiating the GitHubclass imported from graphql-binding-github and use its delegate function. It will then use delegateToSchema under the hood to actually perform the request.

      Schema bindings for public GraphQL APIs can be shared among developers. Next to the graphql-binding-github, there also already is a binding available for the Yelp GraphQL API: graphql-binding-yelp by Devan Beitel

      Auto-generated delegate functions

      The API for these sorts of schema bindings can even be improved to a level where delegate functions are automatically generated. Rather than writing the following github.delegate('query', 'repository', ... ), the binding could expose a function named after the corresponding root field: github.query.repository( ... ).

      When these delegate functions are generated in a build-step and based on a strongly typed language (like TypeScript or Flow), this approach will even provide compile-time type safety for interacting with other GraphQL APIs!

      To get a glimpse of what this approach looks like, check out the prisma-bindingrepository which allows to easily generate schema bindings for Graphcool services, and uses the mentioned approach of automatically generating delegate functions.

      Summary

      This is our second article of the series “Understanding GraphQL schema stitching”. In the first article, we did some groundwork and learned about remote (executable) schemas which are the foundation for most schema stitching scenarios.

      In this article, we mainly discussed the concept of schema delegation by providing a comprehensive example based on the GitHub GraphQL API (the code for the example is available here). Schema delegation is a mechanism to forward (delegate) the execution of a resolver function to another resolver in a different (or even the same) GraphQL schema. Its key benefit is that we don’t have to construct an entirely new query from scratch but instead can reuse and forward (parts of) the incoming query.

      When using schema delegation as the foundation, it is possible to create dedicated NPM packages to easily share reusable schema bindings for existing GraphQL APIs. To get a sense of what these look like, you can check out the bindings for the GitHub API as well as the prisma-binding which allows to easily generate bindings for any Graphcool service.

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/rongfengliang/3121069,作者:rongfengliang,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:rbenv mac&&linux 安装简单说明

      下一篇:fusionauth 通用sso 解决方案学习一 环境运行

      相关文章

      2025-03-21 06:56:46

      使用 Java 与 Spring Boot 实现高效 GraphQL API 开发

      使用 Java 与 Spring Boot 实现高效 GraphQL API 开发

      2025-03-21 06:56:46
      API , Boot , GraphQL , Spring , 客户端 , 数据 , 查询
      2025-03-18 08:27:03

      查看MySQL库中各个表记录数

      查看MySQL库中各个表记录数

      2025-03-18 08:27:03
      schema , table , 数据库
      2025-03-12 09:30:46

      pt-online-schema-change使用

      pt-online-schema-change使用

      2025-03-12 09:30:46
      schema , 索引
      2025-03-11 09:35:31

      【运维】hive 终端突然不能使用:Hive Schema version does not match metastore‘s schema version

      【运维】hive 终端突然不能使用:Hive Schema version does not match metastore‘s schema version

      2025-03-11 09:35:31
      hive , schema , version , 版本
      2024-12-27 07:57:35

      SQL注入(二)手工注入流程,实战,文件读写

      SQL注入(二)手工注入流程,实战,文件读写

      2024-12-27 07:57:35
      group , schema , select , table , union , 注入
      2024-11-14 08:08:23

      GraphQL与传统REST API的比较与选择指南

      在现代Web应用开发中,API(应用程序编程接口)扮演着至关重要的角色。随着技术的发展,出现了多种API设计模式,其中GraphQL和REST是两种非常流行的选择。

      2024-11-14 08:08:23
      API , GraphQL
      2024-10-11 09:12:50

      MySQL information_schema 系统库介绍

      information_schema 顾名思义就是一个信息库,是用来存储数据库的元数据(比如数据库,表的名称,列的数据类型或者访问权限等),在每个 MySQL 实例中,information_schema 保存了它维护的所有数据库的信息,这个库中包含了很多只读的表(它们实际上可看作为视图,因此并没有与之关联的文件,你也无法为它们创建触发器)。

      2024-10-11 09:12:50
      schema , 信息
      2024-06-06 08:24:01

      cube.js 通过require 加载schema

      cube.js 通过require 加载schema

      2024-06-06 08:24:01
      schema , string
      2024-05-21 08:01:24

      cube.js 动态schema 编译处理

      cube.js 动态schema 编译处理

      2024-05-21 08:01:24
      cube , https , schema
      2024-05-21 07:53:51

      cube.js playground暴露的几个不错的功能

      cube.js playground暴露的几个不错的功能

      2024-05-21 07:53:51
      cube , schema
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5240085

      查看更多

      最新文章

      pt-online-schema-change使用

      2025-03-12 09:30:46

      cube.js 通过require 加载schema

      2024-06-06 08:24:01

      cube.js 动态schema 编译处理

      2024-05-21 08:01:24

      cube.js playground暴露的几个不错的功能

      2024-05-21 07:53:51

      cube.js s3 filerepository 支持特定租户npm schema 加载

      2024-05-20 09:39:36

      dremio 连接dremio 扩展dremio 集群规模

      2024-05-16 08:29:23

      查看更多

      热门文章

      Hasura GraphQL 内部表结构

      2023-06-29 08:41:52

      drill 学习 八 drill information schema

      2024-05-14 09:55:04

      dremio 连接dremio 扩展dremio 集群规模

      2024-05-16 08:29:23

      cube.js playground暴露的几个不错的功能

      2024-05-21 07:53:51

      nodejs vm+ babel ast 实现类似cube.js schema 的处理能力

      2024-05-16 08:23:35

      cube.js 通过require 加载schema

      2024-06-06 08:24:01

      查看更多

      热门标签

      linux java python javascript 数组 前端 docker Linux vue 函数 shell git 节点 容器 示例
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Hasura GraphQL 内部表结构

      dremio 连接dremio 扩展dremio 集群规模

      pt-online-schema-change使用

      cube.js playground暴露的几个不错的功能

      cube.js s3 filerepository 支持特定租户npm schema 加载

      drill 学习 八 drill information schema

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号